Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Frage zu "Application.ProcessMessages"
GuaAck - Mo 22.05.17 21:46
Titel: Frage zu "Application.ProcessMessages"
Hallo Experten,
ich möchte mit einem "Start"-Knopf eine laufende Anzeige beginnen und die dann mit einem "Abort"-Knopf wieder anhalten. In der Delphi-Hilfe steht
"Mit der Methode ProcessMessages können Sie die Ausführung einer Anwendung unterbrechen, sodass die Botschaftswarteschlange verarbeitet werden kann."
Aber welche Botschaften (= Messages?) sind das? Im folgenden Code führt ein Drücken des "Abort"-Knopfes jedenfalls nicht dazu, dass BAbortClick ausgeführt wird.
Welche Botschaften werden ausgeführt und was passiert mit den anderen?
(Mit einer Auslagerung der REPEAT...UNTIL-Schleife in einen eigenen Thread ist das Problem behoben.)
Kennt jemand einen gute Quelle, wo ich mal was dazu lesen könnte?
Viele Grüße
GuaAck
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| TForm1 = CLASS(TForm) BStarte: TButton; BAbort: TButton; PROCEDURE BStarteClick(Sender: TObject); PROCEDURE BAbortClick(Sender: TObject); PUBLIC abort: Boolean; END;
PROCEDURE TForm1.BStarteClick(Sender: TObject); BEGIN abort := false; REPEAT .... Application.ProcessMessages; UNTIL abort; END;
PROCEDURE TForm1.BAbortClick(Sender: TObject); BEGIN abort := true; END; |
Moderiert von Narses: Topic aus Windows API verschoben am Mo 22.05.2017 um 22:24
Narses - Mo 22.05.17 22:31
Moin!
GuaAck hat folgendes geschrieben : |
"Mit der Methode ProcessMessages können Sie die Ausführung einer Anwendung unterbrechen, sodass die Botschaftswarteschlange verarbeitet werden kann."
Aber welche Botschaften (= Messages?) sind das? |
Alle Nachrichten (=Messages), die in der MessageLoop des Delphi-Hauptprogrammes (=der VCL-Thread) landen, also auch z.B. die Button-Klicks. :nixweiss:
GuaAck hat folgendes geschrieben : |
Kennt jemand einen gute Quelle, wo ich mal was dazu lesen könnte? |
MSDN ist dein Freund [
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644928(v=vs.85).aspx]. ;)
GuaAck hat folgendes geschrieben : |
Im folgenden Code führt ein Drücken des "Abort"-Knopfes jedenfalls nicht dazu, dass BAbortClick ausgeführt wird. |
Der Code ist ja nicht vollständig, also kann man schlecht sagen, dass er nicht zum gewünschten Ergebnis führt. Lass mal jegliche anderen Befehle aus der Schleife weg, dann wirst du sehen, dass es funktioniert. :idea: ;)
GuaAck hat folgendes geschrieben : |
Welche Botschaften werden ausgeführt |
Alle, gnadenlos. Das geht sogar soweit, dass ggfs. auch der Button zum Starten erneut ausgeführt wird. :hair:
GuaAck hat folgendes geschrieben : |
und was passiert mit den anderen? |
Da gibt´s keine Selektion, simple Queue.
GuaAck hat folgendes geschrieben : |
(Mit einer Auslagerung der REPEAT...UNTIL-Schleife in einen eigenen Thread ist das Problem behoben.) |
Das hätte ich spätestens jetzt auch empfohlen, denn diese unselige Funktion ist leider ganz weit weg von der sog. "ereignisorientierten Programmierung". :?
cu
Narses
GuaAck - Mo 22.05.17 22:50
Danke Narses,
super-umfassend, alles was ich wissen wollte!!!
Gruß
GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!