Главная » Delphi » Создание событий

0

В главе  10, “Архитектура  компонентов: VCL и CLX”, события были  описаны как специальные свойства, связанные с кодом,  выполняющимся при  совершении опреде ленных действий. В данном  разделе события рассматриваются более  детально. Здесь описано, каким  образом возникают события и  как  можно  определить собственные свойства события в разрабатываемом компоненте.

Происхождение событий

В самом общем  виде событие (event) можно  определить как любое  происшествие, вызванное вмешательством пользователя, операционной  системы или  логикой про граммы.  Событие может быть связано с некоторым программным кодом, отвечающим на это происшествие. Совокупность события и кода, выполняющегося в ответ  на это событие, называется свойством событием (event  property) и реализуется в виде указате ля на некоторый метод.  Метод,  на который указывает  это  свойство событие, называ ется обработчиком события (event  handler).

Например, когда пользователь щелкает  кнопкой мыши,  в систему Win32 посылает ся сообщение WM_MOUSEDOWN. Система  Win32 передает это  сообщение элементу управления, для которого оно предназначено и на которое он должен  тем или иным образом ответить. Элемент управления может  ответить на такое  событие, проверив сначала  наличие кода,  предусмотренного для выполнения. Для  этого  он  проверяет, ссылается ли  свойство событие на  какой либо  код.  Если  да,  то  элемент выполняет данный код, называемый обработчиком события.

Событие OnClick — лишь одно из стандартных свойств событий, определенных в Delphi. Оно,  как и другие  свойства события, имеет  соответствующий метод диспетче ризации событий (event  dispatching method). Обычно эти  методы  объявляются как за щищенные методы  того  компонента, которому они  принадлежат (в разделе pro- tected). Они  выполняют операции по определению того,  ссылается ли данное  свой ство событие на какой либо код, предоставленный пользователем компонента. Для свойства OnClick таким  методом является метод  Click(). Свойство OnClick и ме тод Click() определены в классе TControl следующим образом:TControl = class(TComponent)

private

FOnClick: TNotifyEvent;

protected

procedure Click; dynamic;

property OnClick: TNotifyEvent read FOnClick write FOnClick;

end;

А вот как выглядит реализация метода TControl.Click():

procedure TControl.Click;

begin

if Assigned(FOnClick) then FOnClick(Self);

end;

Основное, что  следует  четко  понять —  это  то,  что  свойства события являются не более  чем указателями на методы.  Заметьте, что  свойство FOnClick имеет  тип  TNo- tifyEvent, который определен следующим образом:

TNotifyEvent = procedure(Sender: TObject) of object;

Как видите, тип TNotifyEvent представляет собой  процедуру  с одним  параметром Sender типа  TObject, а директива of object делает  эту процедуру  методом. Указан ное означает, что в процедуру  передается дополнительный неявный параметр, который не  указывается  в списке  параметров, передаваемых данной процедуре. Это  параметр Self, ссылающийся на объект, которому принадлежит данный метод. Когда вызывается метод  Click() компонента, он  проверяет, действительно ли  переменная FOnClick ссылается на метод, и, если да, то вызывает последний.

Разработчик компонента пишет  весь  программный код,  определяющий событие, свойство событие и метод  диспетчеризации. Пользователь компонента создает  лишь обработчик события. В функции метода  диспетчеризации события входит  проверка того,  назначил ли пользователь событию какой либо  код,  и выполнение этого  кода, если таковой существует.

В главе 10, “Архитектура компонентов: VCL и CLX”, было описано, как обработчи ки событий присваиваются свойствам событиям во время  разработки и выполнения программы. В следующем  разделе рассматривается, как определять собственные со бытия, свойства события и методы  их диспетчеризации.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии