Delphi-PRAXiS
Seite 2 von 2     12   

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/)
-   -   OnIdle wird immer wieder ausgeführt (https://www.delphipraxis.net/48784-onidle-wird-immer-wieder-ausgefuehrt.html)

Sidorion 4. Jul 2005 15:40

Re: OnIdle wird immer wieder ausgeführt
 
Yupp. Aber in dem Fall nicht, weil die Applikation den Fokus kriegt, sondern weil sie irgendwann mit der Abarbeitung des Klicks auf den OK-Button fertig ist. Aber natürlich mit dem selben Ergebnis.

RavenIV 4. Jul 2005 15:49

Re: OnIdle wird immer wieder ausgeführt
 
Zitat:

Zitat von Sidorion
Yupp. Aber in dem Fall nicht, weil die Applikation den Fokus kriegt, sondern weil sie irgendwann mit der Abarbeitung des Klicks auf den OK-Button fertig ist. Aber natürlich mit dem selben Ergebnis.

OK, hab ich verstanden.
Danke.

shmia 4. Jul 2005 16:13

Re: OnIdle wird immer wieder ausgeführt
 
Ich denke, du kommst mit dem OnIdle Event auf keinen grünen Zweig.
Mit dem Event OnMessage (wie oben vorgeschlagen) kannst du alles kontrollieren:
Delphi-Quellcode:
var
   lastMsgTime : DWORD;

procedure TForm1.HandleOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
   case Msg.message of
      WM_ACTIVATE,
      WM_ACTIVATEAPP,
      WM_CREATE,
      WM_SETFOCUS,
      WM_MOUSEWHEEL,
      WM_CHAR,
      WM_SYSCHAR,
      WM_RBUTTONDOWN,
      WM_LBUTTONDOWN,
      WM_MBUTTONDOWN,
      WM_MOVE,
      WM_MOVING:
         lastMsgTime := Msg.time;
   end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := HandleOnMessage;
   lastMsgTime := GetTickCount;
end;

// Timer feuert alle 500ms
procedure TForm1.Timer1Timer(Sender: TObject);
var
   x : DWORD;
   diff : DWORD;
begin
   x := GetTickCount;
   diff := x - lastMsgTime;

   if diff > 10000 then // > 10 Sekunden
      Caption := 'ich schlafe jetzt in der TNA'
   else
      caption := IntToStr(diff)+ 'ms seit letzter Message';
end;

RavenIV 4. Jul 2005 19:36

Re: OnIdle wird immer wieder ausgeführt
 
das "HandleOnMessage" funktioniert zu meiner Zufriedenheit.

kann es jedoch sein, dass die Message WM_MOVE nicht zu mir ins Programm kommt?
ich kann das Fenster auf dem Bildschirm rumschieben, wie ich will, die Zeit läuft aber weiter und irgendwas ist das Fenster in der TNA.

gruessle

shmia 5. Jul 2005 08:38

Re: OnIdle wird immer wieder ausgeführt
 
Zitat:

Zitat von RavenIV
kann es jedoch sein, dass die Message WM_MOVE nicht zu mir ins Programm kommt?
ich kann das Fenster auf dem Bildschirm rumschieben, wie ich will, die Zeit läuft aber weiter und irgendwas ist das Fenster in der TNA.

Das ist mir auch schon aufgefallen, dass WM_MOVE nicht ankommt.
Du kannst ja mal mit WM_WINDOWPOSCHANGED und/oder WM_WINDOWPOSCHANGING herumspielen.
WM_SIZE gehört auch noch in die Liste.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.
Seite 2 von 2     12   

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