Verlorener Focus wieder bekommen?



  • Hallo,

    ich verwende in meinem Programm ein CppWebBrowser, um PDF-Dateien anzuzeigen.
    - Ich wähle in einer ListView-Liste eine PDF-Datei aus
    - diese wird dann im CppWebBrowser angezeigt

    Problem:
    Nachdem die Datei angezeigt wird, verliert die ListView den Focus. Nach der Anzeige möchte ich aber, dass die ListView den Focus wieder bekommt.

    SetFocus() und SendMessage(...) haben nicht geholfen, den Focus wieder auf die ListView zu setzen.

    Wie kriege ich sonst den Focus wieder auf die ListView?

    Vielen Dank



  • Vielleicht mit Form1->ActiveControl = ListBox1 ?



  • Hallo

    die Zuweisung an ActiveControl sollte auch nichts anderes machen als SetFocus.

    Das Zurücksetzen des Fokus muß sicher im OnDocumentComplete-Event geschehen.

    Du kannst ja auch mal probieren, den Browser zu disablen, damit er gar nicht erst einen Focus bekommen kann.

    WebBrowser->Enable = false;
    WebBrowser->LoadPDF(); // Dokument laden
    ...
    // erst wenn WebBrowser fertig mit laden ist, also im OnDocumentComplete-Event
    WebBrowser->Enable = true;
    

    bis bald
    akari



  • schnappi schrieb:

    Vielleicht mit Form1->ActiveControl = ListBox1 ?

    Danke für die Antwort, die jedoch leider nicht geholfen hat.

    Nch der Anzeige habe ich mir folgendes ausgeben lassen:

    ShowMessage(Form1->ActiveControl->Name); //wird "ListView" ausgegeben!
    
    if(ListView->Focused())
      ShowMessage("ja");
    else
      ShowMessage("nein");
    
    //ich bekomme immer "ja"
    

    nachdem ich auf "OK" (von ShowMessage()) geklickt habe, dann hat die ListView den Focus wieder.

    Dann habe ich folgendes ausprobiert und zwar nachdem die Datei angezeigt wird:

    Form2->Show(); //ein anderes Formular
    Delay(1000); //Delay-Funktion von Jansen im FAQ
    Form2->Close();
    

    Danach ist der Focus wieder auf ListView!

    Scheinbar ist die Anzeige der Datei nicht schnell genug. Ich setze zwar danach (im Code) den Focus auf die ListView aber die Anzeige erfolgt erst später. Dadurch verliert die ListView den Focus wieder und bekommt ihn nicht mehr zurück.

    Für weitere Vorschläge bin ich dankbar.



  • Andere Idee...

    Verhindere das der andere überhaupt den Focus bekommt, indem TabStop setzt. Vielleicht hilft das ja.



  • Danke für Eure Antworten.

    TabStop auf false zu setzen hat nichts gebracht.

    ICh werde es mit dem Vorschlag von Akari versuche. Da ich jedoch den CppWebBrowser zur Laufzeit erzeuge (und dadurch keine fertigen Ereignisse für ihn habe), muss ich erst mal gucken, wie ich ihm ein Ereignis programmiere und zuweise.



  • Hallo

    Da ich jedoch den CppWebBrowser zur Laufzeit erzeuge (und dadurch keine fertigen Ereignisse für ihn habe), muss ich erst mal gucken, wie ich ihm ein Ereignis programmiere und zuweise.

    siehe BCB-FAQ hier im Forum, Abschnitt Komponenten benutzen.

    bis bald
    akari



  • akari schrieb:

    WebBrowser->Enable = false;
    WebBrowser->LoadPDF(); // Dokument laden
    ...
    // erst wenn WebBrowser fertig mit laden ist, also im OnDocumentComplete-Event
    WebBrowser->Enable = true;
    

    Hallo

    hat leider auch nicht wirklich funktioniert, wie ich es mir wünsche.

    1. wenn ich WebBrowser->Enabled = false; setze, bevor ich das Dokument mit Navigate2(...) anzeige, dann wird ds Dokument nicht mehr angezeigt.

    2. Hab folgendes versucht: im OnDocumentComplete-Event setze ich den Focus wieder auf die ListView. Dies hat dazu geführt, dass die ListView manchmal (nicht immer) den Focus zurück bekommen hat (!)(?)

    Wie könnte man noch den Focus auf die ListView zurück setzen?

    Danke nochmals


Anmelden zum Antworten