Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Можно ли так делать ?   Найти похожие ветки 

 
Ilya__   (2004-05-25 20:54) [0]

Скажите мне можно ли так делать?
Я вставляю TTimer в поле TObject.

 TMyObject = class
 privat
   FTimer: TTimer;
 public
   constructor Create;
   destructor destroy; override;
 end;

constructor Create;
begin
 FTimer := TTimer.Create(nil);
end;

destructor Destroy;
begin
 FTimer.Free;
end;


 
Gero ©   (2004-05-25 20:56) [1]

Можно.


 
Rouse_ ©   (2004-05-25 21:08) [2]

Когдато очень давно писал демку которую и раздавал в ответ на вопросы о таймере в компоненте.
Сейчас к моей большой радости таких вопросов нет... но на всякий случай лови, может быть пригодиться :)

DEMO 1:
// Демонстрационный пример имплантирования таймера в компонент,
// вариант первый, в котором мы используем обычный TTimer
// Для наглядности приведен пример также генерирования события при сработке таймера
// Автор: Александр (Rouse_) Багель

unit Test1Label;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ExtCtrls;

type
 TTest1Label = class(TLabel) // Наследуемся от лейбла, для примера
 private
   FTimer: TTimer;  // Наш таймер
   FOnTimer: TNotifyEvent; // Это новое событие для нашего лейбла
 protected
   // Это процедура которая будет выполнятся при срабатывании таймера
   procedure MyOnTimer(Sender: TObject); dynamic;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   // Делаем чтобы событие было видно в инспекторе обьектов
   property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Fangorn Wizards Lab", [TTest1Label]);
end;

{ TTest1Label }

constructor TTest1Label.Create(AOwner: TComponent);
begin
 inherited;
 FTimer := TTimer.Create(Self); // При создании компонента, создаем таймер
 FTimer.OnTimer := MyOnTimer; // Указываем какую процедуру выполнять при сработке
end;

destructor TTest1Label.Destroy;
begin
 FTimer.Free; // Не забываем удалить таймер
 inherited;
end;

// Вот сама процедура
procedure TTest1Label.MyOnTimer(Sender: TObject);
begin
 // Выводим в кэпшен текущее время
 Caption := TimeToStr(Now);
 // Генерируем событие OnTime нашего компонента
 if Assigned(FOnTimer) then FOnTimer(Self);
end;

end.


DEMO 2:
// Демонстрационный пример имплантирования таймера в компонент,
// вариант второй, в котором мы сами становимся таймером, не смотря на то что мы Лейбл :))
// Для наглядности приведен пример также генерирования события при сработке таймера
// Автор: Александр (Rouse_) Багель

unit Test2Label;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
 TTest2Label = class(TLabel)// Наследуемся от лейбла, для примера
 private
   FWindowHandle: HWND; // Хэндл оконной процедуры
   FOnTimer: TNotifyEvent; // Это новое событие для нашего лейбла
   // Это процедура которая будет выполнятся при приходе сообщений
   procedure WndProc(var Message: TMessage);
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   // Делаем чтобы событие было видно в инспекторе обьектов
   property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Fangorn Wizards Lab", [TTest2Label]);
end;

{ TTest2Label }

constructor TTest2Label.Create(AOwner: TComponent);
begin
 inherited;
 // Создаем оконную процедуру, которая будет ловить сообщения
 FWindowHandle := Classes.AllocateHWnd(WndProc);
 // Устанавливаем таймер на интервал в 1000 милисекунд
 SetTimer(FWindowHandle, 1, 1000, nil);
end;

destructor TTest2Label.Destroy;
begin
 // Удаляем таймер
 KillTimer(FWindowHandle);
 // Удаляем оконную процедуру
 Classes.DeallocateHWnd(FWindowHandle);
 inherited;
end;

// Вот сама процедура, которая срабатывает после прихода сообщений
procedure TTest2Label.WndProc(var Message: TMessage);
begin
 // Если сообщение о сработке таймера
 if Message.Msg = WM_TIMER then begin
   // Выводим в кэпшен текущее время
   Caption := TimeToStr(Now);
   // Генерируем событие OnTime нашего компонента
   if Assigned(FOnTimer) then FOnTimer(Self);
 end;
end;

end.


---
Желаю успехов



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1085778134
Ruslan
2004-05-29 01:02
2004.06.13
Как поместить картинку на ToolButton?


4-1082820190
Андрей2
2004-04-24 19:23
2004.06.13
Сервисы и Windows XP


1-1085995770
kostya
2004-05-31 13:29
2004.06.13
Проблема с компиляцией .pas файла под C++Builder 5


1-1085595407
SeF
2004-05-26 22:16
2004.06.13
поворот массива


1-1085834087
ilnarab
2004-05-29 16:34
2004.06.13
DirectoryListBox