Fórum Problemas com Application.OnIdle e Application.OnMessage? #508510
26/01/2015
0
LigaTimer e DesligaTimer:
procedure TFrmSps.LigaTimer(Sender: TObject; var Done: Boolean);
begin
Timer1.Enabled := true;
end;
procedure TFrmSps.DesligaTimer(var Msg: tagMSG; var Handled: Boolean);
begin
Case Msg.Message of
WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK,
WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN,
WM_NCLBUTTONDOWN, WM_NCMBUTTONDOWN, WM_NCRBUTTONDOWN,
WM_DEADCHAR, WM_KEYDOWN, WM_SYSCHAR, WM_SYSKEYDOWN,
WM_SYSDEADCHAR:
Timer1.Enabled := False;
end;
end;
e no evento OncreateForm eu coloquei
Application.OnIdle := LigaTimer; Application.OnMessage := DesligaTimer;
e dentro do timer coloquei
Timer1.Enabled := False;
ShowMessage('Alerta! O Sistema está ocioso!');
Funciona bem, porém eu quero que ele não detecte só os movimentos do mouse e teclado para verificar se esta ocioso, eu quero que ele detecte se há algum processo rodando dentro do sistema (meu programa) e sete False para o timer se tiver.
Se alguém puder ajudar ficaria grato.
João Pereira
Curtir tópico
+ 0Posts
26/01/2015
Claudio Ferreira
Gostei + 0
26/01/2015
João Pereira
for i:= 0 to 100000 do sleep(150);
rodando, quero que ele só de a mensagem de inativo se todos os laços, condições, threads... estiverem parados.
deu para compreender ?
Gostei + 0
26/01/2015
João Pereira
Case Msg.Message of
assim pararia o Timer.
Gostei + 0
27/01/2015
João Pereira
por
if (Msg.Message = WM_TIMER) or (Msg.Message = WM_MENUSELECT) then
exit;
Timer1.Enabled := False;mas ainda não esta como eu queria. :/
Gostei + 0
29/01/2015
Claudio Ferreira
Faz um teste :
for i:= 0 to 100000 do
Begin
sleep(150);
Application.HandleMessage;
End;
Gostei + 0
29/01/2015
Claudio Ferreira
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)