Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.02.2018, 16:48
fusic fusic вне форума
Прохожий
 
Регистрация: 28.02.2018
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию OnTimer

Помогите решить задачку.
Есть компонент Timer, который для удобства нужно слегка доработать:
-добавить пару методов - это легко получилось !
-и добавить свойство Count=число срабатываний таймера с момента последнего старта. Вот тут засада.
Поле добавил. Но как его инкрементировать (внутри компонента) одновременно с наступлением события OnTimer ?
Помогите пожалуйста !
Ответить с цитированием
  #2  
Старый 28.02.2018, 17:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 04.03.2018, 08:09
fusic fusic вне форума
Прохожий
 
Регистрация: 28.02.2018
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо. Получилось.
В догонку вопрос.
Имеем 6 таймеров на форме (T0...T5).
Имеем переменную F: byte - это 8 флагов полученные в результате обработки данных
полученных с внешнего устроцства. Младшие 6 используются для запуска тех таймеров.
Как проверяя в цикле флаги IsBitSet(F, <номер бита>) запускать или не запускать соответствующий таймер.
Есть вариант через FindComponent. Может быть есть более правильный вариант ?
Ответить с цитированием
  #4  
Старый 04.03.2018, 08:42
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Цитата:
Сообщение от fusic
Есть вариант через FindComponent. Может быть есть более правильный вариант ?
-Массиву присвоить указатели на существующие таймеры:
Код:
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  
Старый 04.03.2018, 09:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Похоже достаточно одного постоянно работающего таймера, а в его обработчике можно проверять состояние установки бит, напр. if (F and (1 shl <номер бита>)) <> 0 then делаем else не делаем
Ответить с цитированием
  #6  
Старый 04.03.2018, 18:37
fusic fusic вне форума
Прохожий
 
Регистрация: 28.02.2018
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Похоже достаточно одного постоянно работающего таймера, а в его обработчике можно проверять состояние установки бит, напр. if (F and (1 shl <номер бита>)) <> 0 then делаем else не делаем


внешнее устройство присылает данные (когда ему захочется), эти данные считаются и принимается решение запускать или не запускать тот или иной таймер а если запускать то на сколько. Одного таймера мало. Можно по GetTickCount в одном цикле проверять но ... зачем.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter