|
#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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#3
|
||||
|
||||
А и ненадо для каждого таймера цеплять уникальный обработчик, Вы в обработчике лучше обработайте Sendera.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
А нафик таг использовать? Можно-же сразу каждому таймеру при создании задать имя уникальное.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
Цитата:
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#6
|
|||
|
|||
Цитата:
Спасибо, очень помогло разобраться. |
#7
|
|||
|
|||
А что делать, если необходимо что бы несколько динамически созданных таймеров работали одновременно?
|
#8
|
||||
|
||||
Запустить их.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
Может я не правильно вопрос задал..
В общем например такой код Код:
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 идет отсчет времени.. Что не так? |
#10
|
|||
|
|||
Извините, все работает моя ошибка в коде
|