Как добавить новое событие в компонент?

Вы можете связываться с компонентами через свойства, методы и события.

Есть маленький пример, как добавить событие к DBGrid, когда пользователь щелкает правой кнопкой мыши.

type TExtDBGrid = class(TDBGrid) private FOnRightClick : TNotifyEvent; procedure WMRButtonDown(var Message : TWMRButtonDown); message WM_RBUTTONDOWN; protected public published property OnRightClick: TNotifyEvent read FOnRightClick write FOnRightClick; end; procedure TExtDBGrid.WMRButtonDown(var Message: TWMRButtonDown); begin if Assigned(FOnRightClick) then FOnRightClick(Self); end;

Это всегда та же самая процедура. Мы должны добавить свойство для события(в секции Published, когда событие должно появиться под событиями в Инспекторе Объектов, иначе — в секции Public) типа, который определяет параметры события. В вышеупомянутом примере мы использовали TNotifyEvent

type TNotifyEvent = procedure (Sender: TObject) of object;

который объявлен в модуле Classes и поэтому всегда доступен.

Когда Вы хотите генерировать событие, Вы должны убедиться, что главная программа назначила процедуру (инструкция Assign), тогда Вы можете вызывать это, используя

FOnEventName(Self, Params…);

В этом примере мы хотим воздействовать на правую кнопку мыши — это работает с зарезервированным словом message и константой Windows для этого события: WM_RBUTTONDOWN .

Конечно, мы можем также определять заказные события с различными параметрами. Надо напомнить, что Вы можете использовать Var-параметры, так, чтобы компонент мог получать ввод из главной программы. Например:

type TMyEvent = procedure (Sender: TObject; VAR aAbort: boolean) of object; procedure TMyComp.AnyFunc; var abort: boolean; begin while (…) do begin if Assigned(FMyEvent) then FMyEvent(Self, abort); if abort then exit; end; end;

Источник: http://demi-s.narod.ru

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.