Пример создания нового события компонента

Попробуем теперь создать собственное событие. Для этого нужно сначала убедиться, что такого события нет в VCL Delphi. Предположим, возникла необходимость создания события, которое возникает каждые 30 секунд. Естественно, для этого случая можно воспользоваться компонентом Timer, который расположен на вкладке System палитры компонентов Delphi. Но, предположим, что компонент должен иметь такое событие для удобства работы с ним. Коддлясозданиясобытияпредставленниже:

unit Halfmin;

interface

uses

Windows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs, ExtCtrls;

type

TTimeEvent = procedure (Sender: TObj'ect; TheTime: TDateTime) of object;

THalfMinute = class (TComponent)

private

FTimer: TTimer;

FOnHalfMinute: TTimeEvent;

FOldSecond, FSecond: Word;

procedure FTimerTimer (Sender: TObject);

protected

procedure DoHalfMinute (TheTime: TDateTime); dynamic;

public

constructor Create (AOwner: TComponent); override;

destructor Destroy; override;

published

property OnHalfMinute: TTimeEvent read FOnHalfMinute write

FOnHalfMinute;

end;

implementation

constructor THalfMinute.Create (AOwner: TComponent);

begin

inherited Create (AOwner);

if not (csDesigning in ComponentState) then begin

FTimer:=TTimer.Create(self);

FTimer.Enabled:=True;

FTimer.Interval:=500;

FTimer.OnTimer:=FTimerTimer;

end;

end;

destructor THalfMinute.Destroy;

begin

FTimer.Free;

inherited Destroy;

end;

procedure THalfMinute.FTimerTimer (Sender: TObject);

var

DT: TDateTime;

Temp: Word;

begin

DT:=Now;

FOldSecond:=FSecond;

DecodeTime (DT,Temp,Temp,FSecond,Temp);

if FSecond <> FOldSecond then

if ((FSecond=30) or (FSecond=0)) then DoHalfMinute(DT);

end;

procedure THalfMinute.DoHalfMinute(TheTime: TDateTime);

begin

if Assigned (FOnHalfMinute) then FOnHalfMinute (Self, TheTime);

end;

end.

Для проверки работоспособности вышеприведенного кода вы можете добавить еще одну процедуру для регистрации нового компонента с именем THalfMinute, предварительно добавив в interface-часть программы строку: procedure Register;

Ниже представлен код для регистрации компонента:

procedure Register;

begin

RegisterComponents('Samples', [THalfMinute]);

end;

Для просмотра работоспособности нового компонента после его регистрации создадим новую форму и разместим на ней новый компонент. Добавим на форму компонент TEdit. Затем добавим обработчик события OnHalfMinute для формы:

procedure TForml.HalfMinute1HalfMinute(Sender: TObject; TheTime: TDateTime);

begin

Edit1.Text: = ('Время '+TimeToStr(TheTime));

Edit1.Refresh;

end;

В результате работы данной программы в компоненте Editl будет выводиться текущее время каждые 30 секунд.








Дата добавления: 2015-09-07; просмотров: 762;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.