Главная страница
    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.47 MB
Время: 0.027 c
14-1085589609
Thor
2004-05-26 20:40
2004.06.13
что мешает сделать так?


14-1085710992
Думкин
2004-05-28 06:23
2004.06.13
С днем рождения! 28 мая


1-1085742909
nitro
2004-05-28 15:15
2004.06.13
Перемещение строки из компонента Listbox1 в Listbox2.


1-1085717205
Litr
2004-05-28 08:06
2004.06.13
Chart


1-1085665362
Delph
2004-05-27 17:42
2004.06.13
TOpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский