Form kommt nicht immer nach vorne
-
chris_f schrieb:
Zitat Borland Hilfe
Beschreibung
Show setzt die Eigenschaft Visible des Formulars auf true und zeigt es im Vordergrund an.
[...]
Ich hab den Interessanten Teil deines Quotes mal fett markiert.... für mich impliziert dies ein BringToFront-Aufruf von Show().
-junix
-
Ausserdem:
BCB Hilfe zum Thema schrieb:
The Show and ShowModal methods set Visible to true and bring the form to the front of all open windows.
-junix
-
Dann werde ich das mal ändern und hoffen das es wirkt. Der XP-Laptop hat mich wieder verlassen, daher kann ichs nicht mehr testen.
Solange das Problem nicht mehr auftritt...
Danke!
PS: "wieso" in Deiner Signatur... oder ist das Absicht?
-
-
Trotzdem ist es komisch, dass Form1 nicht verschwindet, oder? Mach doch mal ein Application->ProcessMessages(); direkt nach Form1->Hide();.
-
@ junix
Und ich dachte der wäre original von dir...
War nicht böse gemeint.
-
Es steht doch da, dass M+A+T+T das geschrieben hat!
-
Ich hab das jetzt mal entsprechend geändert. Nur leider kann ich das jetzt halt nicht testen.
ProcessMessages() kannte ich noch gar nicht.
Danke.Achso M+A+T+T. Richtig, Sorry.
-
Application->ProcessMessages() bewirkt, dass alle anstehenden Fenster-Nachrichten für alle Forms abgearbeitet werden. Damit stellst du sicher, dass WM_SHOWWINDOW auch wirklich von Form1 abgearbeitet wird.
-
WebFritzi schrieb:
Application->ProcessMessages() bewirkt, dass alle anstehenden Fenster-Nachrichten für alle Forms abgearbeitet werden.
Nicht zuletzt deshalb sollte diese Funktion mit Vorsicht genossen werden...
-junix
-
..., denn man könnte einen Stack-Überlauf produzieren.
-
Wie kann das passieren?
Soll heißen: Was läuft in diesem Fall falsch?
-
... Naja, das sieht so aus: Deine Anwendung bzw. dein Fenster hat einen Haupt Thread... also quasi einen MainLoop... In diesem werden die Windows Messages verarbeitet. ProcessMessages() ruft nun diesen Mainloop wieder aus und es werden weiter Nachrichten verarbeitet. Nun kann es passieren, dass eine der Nachrichten (z.B: ein Button KLick) wiederum etwas auslöst, das ProcessMessages aufruft. usw. Zum Schluss hast du auf dem Stack hunderte von nicht beendeten ProcessMessage aufrufen, weil immer wieder was dazwischen kam. Irgendwann ist der Stack voll -> Überlauf.
-junix
-
Wieso sollte die Funktion mit Vorsicht genosen werden?
Starke CPU auslastung?Achja, wie wäre es denn mit ShowModal();?
Damit wäre das Fenster auf jeden Fall vorne, allerdings der Zugriff auf andere Fenster gesperrt.
Kann sein, dass es deshalb net in Frage kommt.J0
-
@ junix:
Aha, kapiert. Danke, jetzt versteh ich das.@ JO:
Ja, genau. ShowModal() geht nicht.
-
J0 schrieb:
Wieso sollte die Funktion mit Vorsicht genosen werden?
Siehe WebFritzis Posting, der den angebrochenen Satz kompetent beendet und damit bewiesen hat, dass er um die Gefahren weiss. Was mir ein Rätsel ist, ist die Tatsache, wieso er nicht auf die Gefahr hinweist... (o;
-junix
-
junix schrieb:
Was mir ein Rätsel ist, ist die Tatsache, wieso er nicht auf die Gefahr hinweist... (o;
Warum musst du mich nur immer kitzeln, junix? Is mir aber auch egal. Ich lass' mich nicht mehr kitzeln, weil ich mittlerweile abgehärtet und nicht mehr kitzelig bin.
EDIT: Na gut, ein bisschen kitzelig bin ich doch noch: Klick mal.