我该如何在Delphi中暂停TTimer并保持间隔?例如,我有一个TTimer,它的时间间隔为10秒,当我设置定时器在工作的前7秒后暂停时,它将保存其状态,然后当我恢复定时器时,它将在剩余的3秒后触发。谢谢大家!
Timer.interval :=1000;
ICount:integer;
在创建存储过程中,将icount设置为0。
Procedure timerevent(sender:tobject);
Begin
If icount=10 then
Begin
// do proccess
Icount = 0;
End;
Inc(icount);
End;
现在你可以在任何地方停止计时器
使用TTimer
无法完成此操作,因为它只是SetTimer
API的简单包装。
要实现此操作,需要跟踪计时器启动和暂停的时间,以便确定剩余时间。当需要暂停计时器时,将计时器的Enabled
属性设置为False
,并将间隔设置为剩余时间。不要忘记,在计时器第一次触发后,需要重新设置其真正的间隔。
从上面可以看出,TTimer
并不是解决您问题的最佳选择。但是,话虽如此,制作一个支持您所需的暂停功能的TTimer
变体并不是非常困难,而且很有趣。
TTimer
不支持您所要求的功能。正如其他人已经评论的那样,您需要停止计时器,将其 Interval
重置为剩余时间,然后启动它,接着在下一个 OnTimer
事件被触发时停止并将其 Interval
重置回10秒。
一个更简单的解决方案是让 TTimer
正常运行,并有一个单独的标志,告诉 OnTimer
事件处理程序是否可以在每次触发时执行其工作,例如:
var
Boolean: Paused = False;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not Paused then
begin
// do proccess
end;
end;
procedure TForm1.PauseButtonClick(Sender: TObject);
begin
Paused := True;
end;
procedure TForm1.ResumeButtonClick(Sender: TObject);
begin
Paused := False;
end;