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