Messagebox bei OnFormCreate



  • Hallo ... kurze Frage :

    Ich programmiere gerade eine Anwendung, bei der im OnFormCreate einige Abfragen passieren - unter anderem eine, die auf Netzlaufwerksverknüpfungen hin prüft. Sollte ein bestimmtes Laufwerk nicht verbunden sein, so erfolgt noch vor dem Anzeigen der Form1 ein Hinweis in einer Application->MessageBox. Funktioniert bis hier auch einwandfrei. Jedoch sobald ich in der Messagebox auf den OK-Button klicke erscheint die Form1 - aber leider minimiert in der Task-Leiste. Ich habe schon versucht sie am Ende der OnFormCreate-Routine mit den Befehlen Form1->Show() oder ShowModal oder SetFocus oder Visible=true wieder zu maximieren - leider ohne Erfolg ? Hat jemand vielleicht eine Ahnung wie ich dieses (Mist)Ding automatisch wieder auf den Bildschirm bekomme ?

    Vielen Dank schon mal für die Hilfe ... Thomas



  • Kann ich nicht nachvollziehen, zeig mal deinen Aufruf.
    Hast du mal an einem Minimalprojekt die Gegenprobe gemacht?



  • Ok - ist schnell erklärt :

    ich habe gerade mal 'n neues Projekt gemacht - Form1 ist angewählt und im Objektinspektor klicke ich bei den Ereignissen in OnCreate rein.
    Quellcode geht auf :

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
         Application->MessageBox("Warten","Achtung",MB_OK);
    
    }
    

    Du siehst - ich tippe lediglich eine MessageBox ein mit OK-Button.
    Jetzt starte ich das ganze : die Messagebox erscheint - ich klicke auf
    OK und siehe da : die Form1 geht auf - ist aber nicht sichtbar
    sondern liegt in der Taskleiste !

    Habe das heute auf der Maalooche unter Win2K probiert und jetzt eben nochmal
    unter XP. Wenn ich folgendes hinter der MessageBox einfüge :

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
         Application->MessageBox("Warten","Achtung",MB_OK);
         Form1->ShowModal();    // Mal dies  ...
         Form1->Show();         // ... mal jenes ...
    
         // habe schon mit dem Focus gespielt .... klappt auch nich'
    }
    

    Form1 liegt immer in der Sch***Taskleiste !!! (Sorry!)

    Thomas



  • Ahja. Obwohl bei mir die Form nicht minimiert sondern "nur" in den Hindergrund gesetzt wird.
    Die einfachste Lösung dürfte wohl sein, die API-Funktion MessageBox() zu benutzen, anstelle von TApplication::MessageBox.

    Der Button in der TaskBar steht übrigens nicht für die Form sondern für das immer unsichtbare Application-Window, eine Besonderheit der VCL-Programme.



  • TApplication::Restore()



  • Scheint logisch, tut aber nicht.
    Was funktioniert ist die Kombination von Minimize und Restore, allerdings gibt es wie gesagt eine einfachere Lösung.



  • Hallo ihr Beiden ...

    ... und Danke für die schnellen Antworten. Habe mich jetzt für die Api-Funktion
    entschieden, also einfach :

    MessageBox(NULL,"Hinweis","Achtung",MB_OK);
    

    Application weglassen und 'n weiterer Parameter im Funktionsaufruf ... dann schnaggelts !

    Thomas


Anmelden zum Antworten