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;