Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2018, 16:57   #1
fusic
 
Регистрация: 28.02.2018
Сообщений: 7
По умолчанию OnTimer. Как инкрементировать поле (внутри компонента) одновременно с наступлением события OnTimer ?

Помогите решить задачку.
Есть компонент Timer, который для удобства нужно слегка доработать:
-добавить пару методов - это легко получилось !
-и добавить свойство Count=число срабатываний таймера с момента последнего старта. Вот тут засада.
Поле добавил. Но как его инкрементировать (внутри компонента) одновременно с наступлением события OnTimer ?
Помогите пожалуйста !
fusic вне форума Ответить с цитированием
Старый 28.02.2018, 17:01   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

выкладывайте код, наработки, иначе тему закроют.
Alar вне форума Ответить с цитированием
Старый 28.02.2018, 17:03   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Переопределить вот этот protected-метод:

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 28.02.2018 в 17:08.
min@y™ вне форума Ответить с цитированием
Старый 28.02.2018, 17:06   #4
fusic
 
Регистрация: 28.02.2018
Сообщений: 7
По умолчанию

Код:
unit TimerCnt;

interface

uses
  SysUtils, Classes, ExtCtrls;

type
  TTimerCnt = class(TTimer)
  private
    { Private declarations }
    FCount:cardinal;
    //FOnTimerCnt : TNotifyEvent;
  protected
    { Protected declarations }
    //procedure DoOnTimer; dynamic;
  public
    { Public declarations }
    //property OnTimerCnt : TNotifyEvent read FOnTimerCnt write FOnTimerCnt;
    procedure Star;
    procedure Stop;
    procedure ReStart;
    constructor Create (AOwner : TComponent);override;
    //property Count : cardinal read FCount write FCount;
    //procedure OnTimer; override;
    //function Cnt (): cardinal;
  published
    { Published declarations }
    property Count : cardinal read FCount write FCount;
  end;

procedure Register;

implementation

//procedure TTimerCnt.OnTimerCnt();
//begin
  //Inc(FCount);
  //if Assigned(OnTimer) then OnTimer(Self);
//end;

constructor TTimerCnt.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FCount:=0;
end;

//procedure TTimerCnt.OnTimer;
//begin
//inherited OnTimer;
//Inc(FCount);
//end;

procedure Register;
begin
  RegisterComponents('Samples', [TTimerCnt]);
end;

procedure TTimerCnt.Star;
begin
FCount:=0;
Enabled := true;
end;

procedure TTimerCnt.Stop;
begin
Enabled := false;
end;

procedure TTimerCnt.ReStart();
begin
Enabled := false;
Enabled := true;
end;

end.

Последний раз редактировалось Аватар; 28.02.2018 в 17:09.
fusic вне форума Ответить с цитированием
Старый 28.02.2018, 17:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Написали же - переопредели метод Timer. В нем Inc(FCount) и inherited
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 17:27   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Переопределить вот этот protected-метод:
Код нужно выкладывать текстом, а не картинкой, даже топик стартер правильно оформил.
Alar вне форума Ответить с цитированием
Старый 28.02.2018, 17:28   #7
fusic
 
Регистрация: 28.02.2018
Сообщений: 7
По умолчанию

Спасибо. Работает.

Код:
unit TimerCnt;

interface

uses
  SysUtils, Classes, ExtCtrls;

type
  TTimerCnt = class(TTimer)
  private
    FCount:cardinal;
  protected
    procedure Timer; override;
  public
    procedure Star;
    procedure Stop;
    procedure ReStart;
    constructor Create (AOwner : TComponent);override;
  published
    property Count : cardinal read FCount write FCount;
  end;

procedure Register;

implementation

procedure TTimerCnt.Timer;
begin
  inherited;
  Inc(FCount);
end;

constructor TTimerCnt.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FCount:=0;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TTimerCnt]);
end;

procedure TTimerCnt.Star;
begin
FCount:=0;
Enabled := true;
end;

procedure TTimerCnt.Stop;
begin
Enabled := false;
end;

procedure TTimerCnt.ReStart();
begin
Enabled := false;
Enabled := true;
end;

end.
fusic вне форума Ответить с цитированием
Старый 28.02.2018, 18:18   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Код нужно выкладывать текстом, а не картинкой, даже топик стартер правильно оформил.
Мне не нравится тутошный скрипт подсветки. Он тупой и убогий.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.02.2018, 18:19   #9
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Мне не нравится тутошный скрипт подсветки. Он тупой и убогий.
Ничего не поделаешь, код должен быть кодом, а не картинкой.
Alar вне форума Ответить с цитированием
Старый 28.02.2018, 18:20   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от fusic Посмотреть сообщение
Спасибо. Работает.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
элемент ActiveX поле - как сделать список внутри него? tverdij Microsoft Office Word 12 09.04.2013 12:03
Как программно изменить цвет "компонента"? Смотрим внутри... Vova777 Общие вопросы Delphi 3 15.02.2012 05:56
У N одновременно запущенных потоков приходит N события с одними и теми же параметрами TwiX Работа с сетью в Delphi 3 20.02.2010 21:17
Странности в работе с событием OnTimer Mixasik Общие вопросы Delphi 3 17.01.2009 01:22