2010-10-10 5 views
1

Comment pourrait-on réinitialiser le TTimer1 de manière à ce que les déclencheurs soient encore plus rapides et que le comptage redémarre?delphi 7 réinitialisation de la minuterie

La question est que la commande Durée de conception doit agir au moment de l'exécution.

Répondre

9

Je suppose que vous voulez dire en fait que

var 
    Timer1: TTimer; 

Ensuite, pour réinitialiser la minuterie, faire

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

Dans ma bibliothèque standard "RejbrandCommon.pas", je l'ai fait défini

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

Ensuite, chaque fois que j'ai besoin de redémarrer je chronomètre, je fais juste

RestartTimer(Timer1); 

Bien sûr, si vous voulez la procédure OnTimer (par ex. Timer1Timer) pour déclencher avant le redémarrage, vous devez faire

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

ou définir

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

(Bien sûr, la dernière procédure, TriggerAndRestartTimer, n'est pas une méthode, et donc il n'y a pas Self. Cependant, très probablement la procédure Timer1Timer ne se soucie pas de la propriété Sender, donc vous pouvez simplement envoyer quoi que ce soit, comme nil au lieu de Self.)

+0

essayé, ne fonctionne pas. – none

+1

Je sais que ça fonctionne. Faites-le tout le temps. Pourquoi ça ne marche pas? La minuterie n'est-elle pas réinitialisée, l'événement ne se déclenche-t-il pas, le code ne compile-t-il pas, l'ordinateur explose-t-il? –

+0

@none: Cela fonctionne définitivement. – gabr

1

Il C'est pas moyen de le faire en design. Demandez au gestionnaire de désactiver le TTimer, puis de le réactiver.

1

La réinitialisation d'un TTimer pour déclencher son événement est simple. Lorsque vous désactivez et activez le TTimer, votre événement timertimeout se réinitialise en fonction de l'intervalle de temps que vous avez défini. Par exemple,

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

événement Timer1 se déclenche quand une seconde est la prochaine fois que vous activez et désactivez la minuterie.

Questions connexes