你的说明实际上不正确,这个空闲通常用于干某些长时间消耗CPU资源的程序用的,一般可以把后台代码放在这个事件里进行处理。 一般你即使不操作你的这个程序了,你的程序也不会连续收到onidle事件,一定夹杂其他类型的事件你的要求其实可以描述为,如果没有人操作你的程序超过1分钟,就弹出一个消息框,这样的话,就比较容易处理了。 定义一个计时器timer1,定义一个空闲开始时间变量dtStartIdle,在Application.OnMessage里如下写 if ((((Msg.message >=WM_NCMOUSEMOVE) and (Msg.message <=WM_NCXBUTTONDBLCLK)) or ((Msg.message >=WM_KEYFIRST) and (Msg.message <=WM_KEYLAST)) or ((Msg.message >=WM_MOUSEFIRST) and (Msg.message <=WM_MOUSELAST))) and Timer1.Enabled) then begin dtStartIdle:= Now; end;然后timer1计时器事件里这样写 if Int(SecondSpan(Now, dtStartIdle)) >= 60 then begin timer1.Enabled := False; //弹出消息框等,你要做的1分钟空闲后要做的事情 end;
一般你即使不操作你的这个程序了,你的程序也不会连续收到onidle事件,一定夹杂其他类型的事件你的要求其实可以描述为,如果没有人操作你的程序超过1分钟,就弹出一个消息框,这样的话,就比较容易处理了。
定义一个计时器timer1,定义一个空闲开始时间变量dtStartIdle,在Application.OnMessage里如下写
if ((((Msg.message >=WM_NCMOUSEMOVE) and (Msg.message <=WM_NCXBUTTONDBLCLK)) or
((Msg.message >=WM_KEYFIRST) and (Msg.message <=WM_KEYLAST)) or
((Msg.message >=WM_MOUSEFIRST) and (Msg.message <=WM_MOUSELAST))) and
Timer1.Enabled) then
begin
dtStartIdle:= Now;
end;然后timer1计时器事件里这样写
if Int(SecondSpan(Now, dtStartIdle)) >= 60 then
begin
timer1.Enabled := False;
//弹出消息框等,你要做的1分钟空闲后要做的事情
end;
能说说onidle事件用处及原理吗?