Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

Re: OnIdle wird immer wieder ausgeführt

  Alt 4. Jul 2005, 16:13
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;
Andreas
  Mit Zitat antworten Zitat