E um lance capital é quando você precisa desabilitar a execução de um Timer para que não conflita com uma determinada rotina.
É fato é que é um bom hábito desabilitar o Timer no inicio de sua execução, habilitando-o no fim, como no exemplo abaixo:
proceure Form1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; //... //... Timer1.Enabled := True; end;
Isso evita encavalamento, caso dê o tempo de executar de novo antes de se finalizar o procedimento.
Se em outro ponto você precisar desabilitar esse Timer, sua primeira opção seria:
//... Timer1.Enabled := False; //...
Mas veja que interessante: Você não sabe se o Timer está em andamento e também não se deu conta que a última linha do Timer irá habilitar o Timer novamente.
Depois de anos convivendo com isso, tive uma sacada legal:
//... Timer1.OnTimer := nil; //Assim nada será executado... while not Timer1.Enabled do Application.ProcessMessages; //Isso indica que o Timer está em excução Timer1.Enabled := False; //... //... Timer1.OnTimer := Timer1Timer; //Aqui devolvemos o evento Timer1.Enabled := True; //Aqui religamos o Timer //...