![]() |
|
|
|
|
#1
|
|||
|
|||
|
Всех приветствую!
Встала задача - создать нужное количество таймеров во время запуска программы (количество заранее неизвестно и считывается из файла конфигурации). У каждого таймера должна быть своя процедура OnTimer Пробовал сделать таким образом Код:
... var ... TimerPool : array of TTimer; ... TimerPool[1] := TTimer.Create(Self); TimerPool[1].OnTimer := .... ... только остается непонятным - каким образом прицепить к каждому таймеру в массиве свой OnTimer. Также в каждый OnTimer нужно передать свои параметры - 3 строковых значения. Может кто сталкивался с нечто подобным и поможет советом? |
|
#2
|
||||
|
||||
|
Если кол-во таймеров неизвестно, то придется писать одну процедуру OnTimer, кот. будет менять свое поведение в зависимости от того, какой таймер ее вызвал.
Код:
var
TimerPool : array of TTimer;
procedure TForm1.TimerProc(Sender: TObject);
begin
case (Sender as TTimer).Tag of
0: Label1.Caption:= 'работает 1 таймер';
1: Label2.Caption:= 'работает 2 таймер';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(TimerPool, 2);
TimerPool[0]:= TTimer.Create(Self);
TimerPool[1]:= TTimer.Create(Self);
TimerPool[0].Tag:= 0;
TimerPool[1].Tag:= 1;
TimerPool[0].OnTimer:= TimerProc;
TimerPool[1].OnTimer:= TimerProc;
end; |
|
#3
|
|||
|
|||
|
Цитата:
Спасибо, очень помогло разобраться. |
|
#4
|
|||
|
|||
|
А что делать, если необходимо что бы несколько динамически созданных таймеров работали одновременно?
|
|
#5
|
||||
|
||||
|
Запустить их.
![]() |
|
#6
|
|||
|
|||
|
Может я не правильно вопрос задал..
В общем например такой код Код:
var
Form2: TForm2;
MyTimer: array[0..2] of TTimer;
Second1,Second2:integer;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
MyTimer[0]:=TTimer.Create(Self);
MyTimer[1]:=TTimer.Create(Self);
MyTimer[0].OnTimer:=StartTimer;
MyTimer[1].OnTimer:=StartTimer;
MyTimer[0].Tag:=0;
MyTimer[1].Tag:=1;
MyTimer[0].Interval:=1000;
MyTimer[1].Interval:=1000;
MyTimer[0].Enabled:=True;
MyTimer[1].Enabled:=True;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Second1:=0;
Second2:=0;
end;
procedure TForm2.StartTimer(Sender: TObject);
begin
case (Sender as TTimer).Tag of
0: begin
Second1:=Second1+1;
Label1.Caption:=IntToStr(Second1)
end;
1: begin
Second2:=Second2+1;
Label2.Caption:=IntToStr(Second2)
end;
end;
end;Получается так что, только в label1 идет отсчет времени.. Что не так? |
|
#7
|
||||
|
||||
|
А и ненадо для каждого таймера цеплять уникальный обработчик, Вы в обработчике лучше обработайте Sendera.
|
|
#8
|
||||
|
||||
|
А нафик таг использовать? Можно-же сразу каждому таймеру при создании задать имя уникальное.
|
|
#9
|
||||
|
||||
|
Цитата:
|