![]() |
|
|
#1
|
|||
|
|||
|
Помогите решить задачку.
Есть компонент Timer, который для удобства нужно слегка доработать: -добавить пару методов - это легко получилось ! -и добавить свойство Count=число срабатываний таймера с момента последнего старта. Вот тут засада. Поле добавил. Но как его инкрементировать (внутри компонента) одновременно с наступлением события OnTimer ? Помогите пожалуйста ! |
|
#2
|
||||
|
||||
|
Код:
type
TTimer = class(ExtCtrls.TTimer)
private
FCount: Integer;
protected
procedure Timer; override;
public
property Count: Integer read FCount;
end;
...
procedure TTimer.Timer;
begin
Inc(FCount);
inherited Timer;
end; |
|
#3
|
|||
|
|||
|
Спасибо. Получилось.
В догонку вопрос. Имеем 6 таймеров на форме (T0...T5). Имеем переменную F: byte - это 8 флагов полученные в результате обработки данных полученных с внешнего устроцства. Младшие 6 используются для запуска тех таймеров. Как проверяя в цикле флаги IsBitSet(F, <номер бита>) запускать или не запускать соответствующий таймер. Есть вариант через FindComponent. Может быть есть более правильный вариант ? |
|
#4
|
||||
|
||||
|
Цитата:
Код:
TForm1=class(TForm) ... public timers: array[0..5] of Timer; end; ... procedure TForm1.OnCreate(Sender: TObject); begin ... timers[0] := T0; ... timers[5] := T5; end; ... Код:
TForm1=class(TForm)
...
public
timers: array[0..5] of Timer;
end;
...
procedure TForm1.OnCreate(Sender: TObject);
var
i: Integer;
begin
...
for i := 0 to 5 do
begin
timers[i] := TTimer.Create(Self);
with timers[i] do
begin
Interval := ...;
OnTimer := SomeTimerProc;
Active := ...;
end;
end;
...
end;
... |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
fusic (04.03.2018)
| ||
|
#5
|
||||
|
||||
|
Похоже достаточно одного постоянно работающего таймера, а в его обработчике можно проверять состояние установки бит, напр. if (F and (1 shl <номер бита>)) <> 0 then делаем else не делаем
|
|
#6
|
|||
|
|||
|
Цитата:
внешнее устройство присылает данные (когда ему захочется), эти данные считаются и принимается решение запускать или не запускать тот или иной таймер а если запускать то на сколько. Одного таймера мало. Можно по GetTickCount в одном цикле проверять но ... зачем. |