2010-10-10 74 views
1

如何重置TTimer1,所以即使是在时间触发器,计数重新启动?德尔菲7定时器复位

问题是设计时间命令在运行时发生作用。

回答

9

我想你实际上意味着

var 
    Timer1: TTimer; 

然后,复位定时器,做

Timer1.Enabled := false; 
Timer1.Enabled := true; 

在我的 “RejbrandCommon.pas” 标准库,其实我已经定义

procedure RestartTimer(Timer: TTimer); 
begin 
    Timer.Enabled := false; 
    Timer.Enabled := true; 
end; 

然后,每次我需要重新启动I计时器,我只是做

RestartTimer(Timer1); 

当然,如果你想OnTimer程序(例如, Timer1Timer)重启前触发,你必须做

Timer1.OnTimer(Self); 
Timer1.Enabled := false; 
Timer1.Enabled := true; 

或定义

procedure TriggerAndRestartTimer(Timer: TTimer); 
begin 
    Timer.OnTimer(nil);  
    Timer.Enabled := false; 
    Timer.Enabled := true; 
end; 

(当然,最后一道工序,TriggerAndRestartTimer,不是方法,因此没有Self。然而,最有可能的Timer1Timer过程不关心Sender属性,所以你可以只发送任何东西,如nil,而不是Self

+0

试过这个,不行。 – none 2010-10-10 14:50:37

+1

我知道它的工作原理。一直这样做。为什么它不起作用?是不是定时器重置,是不是正在触发的事件,不是代码编译,计算机是否爆炸? – 2010-10-10 17:08:15

+0

@none:这绝对有效。 – gabr 2010-10-10 20:39:27

1

有在设计时无法做到这一点。让处理程序禁用TTimer然后重新启用它。

1

重置TTimer以重新触发其事件很简单。当您禁用并启用TTimer时,您的timertimeout事件将根据您设置的时间间隔重新触发。例如,

Timer1.interval:=1000; //milliseconds 
Timer1.enabled:=false; 
Timer1.enabled:=true; 

下一次启用和禁用定时器时,Timer1事件将在一秒钟内启动。