2010-10-10 77 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事件將在一秒鐘內啓動。