|
#1
|
|||
|
|||
OnTimer
Помогите решить задачку.
Есть компонент 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; ... Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
fusic (04.03.2018)
|
#5
|
||||
|
||||
Похоже достаточно одного постоянно работающего таймера, а в его обработчике можно проверять состояние установки бит, напр. if (F and (1 shl <номер бита>)) <> 0 then делаем else не делаем
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
|||
|
|||
Цитата:
внешнее устройство присылает данные (когда ему захочется), эти данные считаются и принимается решение запускать или не запускать тот или иной таймер а если запускать то на сколько. Одного таймера мало. Можно по GetTickCount в одном цикле проверять но ... зачем. |