Jeśłi mam kilka timerów na formatce to żadne z nichnie działa prawidłowo odmierzajc z podanym interwałem - tzn odmierza dwa razy szybciej. I tteraz pytanie czym zastapić standartowego timera tak by mogł "taktować" nie wpływajac na inne timery? Albo co należy zrobić by te timery co już mam nie wpływały na siebie wzajemnie.
Najłatwiej zastąpić timera wątkiem i dac sleep'a jako interwała :). O wątkach znajdziesz artykuł... Nie rozumiem, dlaczego one nawzajem na siebie wplywaja? Nigdy sie nie spotkałem z czyms takim :)
one zazwyczaj odliczają czas jak im się podoba (np u mnie często odliczają czas 3 razy szybciej jak ruszam myszką po formie :-| ), nie ma co im ufać, ale jeśli fucktycznie wpływają na siebie to możesz ustawić jednego timera na ich wspólny NWD i zwiększać w nim licznik i odpalać odpowiednie procedury przy określonych warunkach, np
var Form1: TForm1;
licznik: integer = 0;
TimerEnabled: array[0..2] of boolean;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
TimerEnabled[0] := not TimerEnabled[0];
end;
procedure WykonajProcedure;
begin
ShowMessage('Yellow !');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(licznik);
if((licznik * Timer1.Iterval) mod 500 = 0) and TimerEnabled[0] then WykonajProcedure;
if((licznik * Timer1.Iterval) mod 750 = 0) and TimerEnabled[1] then WykonajProcedure2;
if((licznik * Timer1.Iterval) mod 1000 = 0) and TimerEnabled[2] then WykonajProcedure3;
end;
Rozwiazałem problem stawiaj jednego timera i dodaja do jego funkcji zminną typu boolean, i po prostu timer taktuje co 1000ms i w kazdym takcie sprawdza czy zminna jest true. jeśłi jest to zgodnie z warunkiem wykonuje oparacje jeśłi nie to idzie dalej. Rozwiaznaie całkiem dobre - a mi dokładne taktownie nie jest potrzebne