| Autor |
Beitrag |
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 21.09.05 20:13
Wo merkt man eigentlich den Unterschied bei Programmen zw. Application.MessageHandle und Application.ProcessMessages? Das MessageHandle soll ja eigentlich eher für zeitintensive Processe sein als ProcessMessages, aber ich merke keinen Unterschied. Ich hatte gehofft das er vlt. noch weiterarbeitet wenn ich MessageHandle nehme, während das Fenster verschoben ist ohne einen extra Thread zu nehmen. (der Befehl wird nur aller 250ms aufgerufen, so das eigentlich das verschieben stocken müsste, wenn er nur kurz reagiert). Wo liegt spürbar ein Unterschied zw. den beiden Befehlen?
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 21.09.05 21:09
Du meinst wohl HandleMessage... der Unterschied ist einfach der, dass HandleMessage (wie der Name schon sagt) nur eine Message verarbeitet, während ProcessMessages alle in der Message-Queue wartenden Messages verarbeitet.
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 21.09.05 21:16
Weiterhin (und sogar noch wichtiger) behandelt HandleMessage IMMER genau eine Nachricht (und wartet extra auf eine solche wenn nötig). ProcessMessages begnügt sich auch mit Nixtun.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Heiko 
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Do 22.09.05 06:22
Ist es nicht nachteilig, wenn bei zeitintensiven Programmen er auf eine Message wartet, anstatt einfach weiterzumachen, wenn er merkt das keine da ist?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 29.12.05 15:44
Daher hab ich noch niemanden gesehen, der bei Zeitintensiven Dingen HandleMessage einsetzt ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
DavidKlimas
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 14.04.07 14:57
Titel: Processmessages + OnMessage
Ich schliesse hier mal an die unterhaltung an.
Ich hab in meinem Programm eine (fast endlos) Schleife mit einem ProcessMessages eintrag. Ein Label mit MouseLeave-Procedure soll die schleife beenden, doch nichts passiert, da MouseLeave keine "Message" erstellt, die von ProcessMessage erkannt werden Würde. Was tun?
|
|
Heiko 
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Sa 14.04.07 15:04
Ich habe gerade mal geguckt. Das OnLeave-Ereignis wird auch durch messages ausgelöst:
Delphi-Quelltext 1: 2: 3: 4:
| TControl = class(TComponent) private ... procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; |
Der Fehler dürfte bei dir also woanders liegen.
|
|
DavidKlimas
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 14.04.07 15:25
Hier ein kleines vereinfachtes Beispiel :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.StartButtonClick(Sender: TObject); begin While Image1.left > 0 do begin Image1.Left := Image1.Left + 1; application.ProcessMessages; end; ShowMessage('Nothing'); end;
procedure TForm1.EndLabelMouseLeave(Sender: TObject); begin Image1.Left := 0; end; |
Die Nachricht 'Nothing' wird nie gezeigt.
|
|