Как сделать предопределенный обработчик события в Delphi? У DBgrid (TDBGridEh) есть колонки (TColumnEh), у которой есть событие OnDataHintShow. Есть свой созданный класс TDynamicGrid = class(TDBGridEh), в нем описана процедура ShowPanel. Как сделать так, что бы по умолчанию, у нужной колонки на событии OnDataHintShow вызывалась процедура ShowPanel? Т.е. не надо было её каждый раз прописывать, а действовала у всех Гридов этого класса.constructor TDynamicGrid.Create(AOwner: TComponent); var q: TDBgridEhDataHintShowEvent; begin inherited; // FieldPanel - параметр который содержит имя колонки, для которой предопределяем событие. self.FieldColumns[self.FieldPanel].OnDataHintShow := .............................. end; Если пишу так:self.FieldColumns[self.FieldPanel].OnDataHintShow := self.ShowPanel() То выдает ошибку: Incompatible types: 'TDBGridEhDataHintShowEvent' and 'procedure, untyped pointer or untyped parameter'
Вы можете создать новый метод-обработчик события OnDataHintShow и присвоить его колонке по умолчанию в конструкторе вашего класса TDynamicGrid. В этом методе вы можете вызвать процедуру ShowPanel.
Пример:
type TDynamicGrid = class(TDBGridEh) private procedure DefaultDataHintShow(Column: TColumnEh; var Params: TDBGridEhDataHintParams); public constructor Create(AOwner: TComponent); override; end; implementation constructor TDynamicGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); self.FieldColumns[self.FieldPanel].OnDataHintShow := DefaultDataHintShow; end; procedure TDynamicGrid.DefaultDataHintShow(Column: TColumnEh; var Params: TDBGridEhDataHintParams); begin // Вызываем процедуру ShowPanel ShowPanel(); end;
Таким образом, при создании экземпляра класса TDynamicGrid, метод DefaultDataHintShow будет автоматически присваиваться событию OnDataHintShow нужной колонки.
Вы можете создать новый метод-обработчик события OnDataHintShow и присвоить его колонке по умолчанию в конструкторе вашего класса TDynamicGrid. В этом методе вы можете вызвать процедуру ShowPanel.
Пример:
typeTDynamicGrid = class(TDBGridEh)
private
procedure DefaultDataHintShow(Column: TColumnEh; var Params: TDBGridEhDataHintParams);
public
constructor Create(AOwner: TComponent); override;
end;
implementation
constructor TDynamicGrid.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
self.FieldColumns[self.FieldPanel].OnDataHintShow := DefaultDataHintShow;
end;
procedure TDynamicGrid.DefaultDataHintShow(Column: TColumnEh; var Params: TDBGridEhDataHintParams);
begin
// Вызываем процедуру ShowPanel
ShowPanel();
end;
Таким образом, при создании экземпляра класса TDynamicGrid, метод DefaultDataHintShow будет автоматически присваиваться событию OnDataHintShow нужной колонки.