Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Application.Processmessages blockiert (https://www.delphipraxis.net/133296-application-processmessages-blockiert.html)

DoktorD 29. Apr 2009 12:09


Application.Processmessages blockiert
 
Hi. Ich nutze in meinen Programm Application.Processmessages um zu warten, bis eine bestimmte sage eintritt.
Aber wenn ich dies in einer Whileschleife ablaufen lasse, kann ich das Programm mit Alt + F4 nicht beenden.

Warum ist das denn so?
Wie kann ich das lösen?

Hier mal ein kleines Beispiel:
Delphi-Quellcode:
procedure TForm22.FormActivate(Sender: TObject);
begin
  while m_bTest = FALSE do
    Application.ProcessMessages;
end;
Danke für Eure Antworten

mkinzler 29. Apr 2009 12:14

Re: Application.Processmessages blockiert
 
Delphi-Quellcode:
Application.ProcessMessages;
wartet nicht, sondern stösst nur die Abarbeitung von Windows-Nachrichten an. Du solltest zusätzlich noch einen Delay() o.ä. einbauen

DoktorD 29. Apr 2009 12:21

Re: Application.Processmessages blockiert
 
Ok, das würde einiges erklären. Mit einem Sleep hab ich es auch schon probiert aber da geht es auch nicht.

Delphi-Quellcode:
procedure TForm22.FormActivate(Sender: TObject);
begin
  while m_bTest = FALSE do
  begin
    Application.ProcessMessages;
    sleep(10);
  end;
end;
Gibts in Delphi denn ein Delay? Die Delays in diesem Forum sind nämlich auch alle mit Application.Processmessages gelöst

himitsu 29. Apr 2009 12:21

Re: Application.Processmessages blockiert
 
nein, Application.ProcessMessages verarbeitet die Nachrichten ... bzw. dieses ruft solange das inderne Application.ProcessMessage (man beachte das fehlende S) auf, wie Nachrichten vorhanden sind und .ProcessMessage verarbeitet diese dann.


[add]
ach ja, und nicht auf False/True prüfen!

[add2]
nein, aber DelayDelay bzw. Hier im Forum suchenDelay

Delphi-Quellcode:
while not m_bTest and not Application.Terminated do
  Application.ProcessMessages;

mkinzler 29. Apr 2009 12:25

Re: Application.Processmessages blockiert
 
Sleep() ist aktives warten. Sollte man nicht verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz