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 Frage zu Application Processmessages (https://www.delphipraxis.net/13382-frage-zu-application-processmessages.html)

iamjoosy 17. Dez 2003 12:03


Frage zu Application Processmessages
 
Hallo,

folgende Ausgangslage:

Ein Tlabel an Position 100,100

Eine OnMouseEnter Event mit folgendem Inhalt:

Delphi-Quellcode:
begin
  ShowMessage('Der Event ist angekommen !')
end;
Ein Tbutton mit folgendem OnClick-Event:

Delphi-Quellcode:
begin
  Mouse.CursorPos:=ClienttoScreen(Point(101,101));
end;
Bei Click auf Button, kein Problem: Die Message wird angezeigt!

Wenn in OnClick jetzt aber folgendes steht:

Delphi-Quellcode:
begin
  Mouse.CursorPos:=ClienttoScreen(Point(101,101));
  while true do
  begin
    Application.ProcessMessages;
  end;
end;
bewegt sich zwar der Cursor, aber der Event wird nicht ausgelöst!

Also meine Frage: Wieso

Hintergrund:
Im echten Programm steht natürlich nicht die Endlosschleife "while true", sondern heir wird in einer Schleife Daten "gepollt", und es soll entprechend der Daten (von einem Eyetracker ... aber das würde jetzt hier zu weit führen) der Cursor psoitioniert werden und aber auch Ereignisse ausgelöst werden.

[edit=sakura] Space in die Überschrift eingesetzt. Mfg, sakura[/edit]

iamjoosy 17. Dez 2003 12:35

Re: Application.Processmessages Frage
 
Ok, habe noch ein wenig rumprobiert, und wenn man statt

Application.ProcessMessages

Application.HandleMessage verwendet funktioniert es !

Also, kann mir jemand den Unterschied zwischen den beiden erklären ?
Wann verwende ich das eine, wann das andere ??

Jens Schumann 17. Dez 2003 12:36

Re: Application.Processmessages Frage
 
Hallo,
Application.ProcessMessages fragt die dem Prozess von Windows zugeteilelte Botschaftswarteschlange
ab. D.h. hier wird auf Botschaften von Windows reagiert. Der klickt mit das Maus wäre z.B. solch eine Botschaft. Bei CM_OnMouseEnter handelt es sich um eine Komponenten-Botschaft. Diese Botschaft
wird verarbeitet, wenn NICHT die Windows-Botschaftswarteschlange abgearbeitet wird.
Dies kann nachvollzogen werden, wenn in der Unit Forms nach die Begriffen Idle, DoMouseIdle und
HandleMessage gesucht wird.

Jens Schumann 17. Dez 2003 12:38

Re: Application.Processmessages Frage
 
Hallo,
den Unterschied zwischen HandleMessage und ProcessMessages findet man in der Delphi-Hilfe

Jens Schumann 17. Dez 2003 12:39

Re: Application.Processmessages Frage
 
Hallo,
grundsätzlich solltest Du das Pollen aber in einen eigenen Thread auslagern.

iamjoosy 17. Dez 2003 12:55

Re: Application.Processmessages Frage
 
Hi Jens, vielen Dank für deine Antwort !

In DH habe ich das schon nachgeschaut, fand das aber nicht so aussagekräftig wie deine Erklärung (Lob).

Dass man das Pollen in einen eigenen Thread auslagern sollte habe ich mir schon fast gedacht. Da ich allerdings noch nie mit Threads gearbeitet habe muss ich mich wohl mal in dieses Thema einarbeiten. Soweit ich weiss hat hier jemand ein Turorial dazu geschrieben ... werde das mal durcharbeiten und dann bestimmt mit einer Menge Fragen kommen.

Nochmals Danke Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.

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