@KTG

Как сделать предопределенный обработчик события в 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'
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
@KTG Автор вопроса
В классе описал процедуру с теми же параметрами которые она принимает.
procedure ShowPanel(Sender: TCustomDBGridEh;
                CursorPos: TPoint; Cell: TGridCoord; InCellCursorPos: TPoint;
                                Column: TColumnEh; var Params: TDBGridEhDataHintParams;
                                                var Processed: Boolean);


Процедуру саму описывал без параметров
procedure TDynamicGrid.ShowPanel;
var
begin
end;

присваивал так:
constructor TDynamicGrid.Create(AOwner: TComponent);
begin
  inherited;
  self.OnDataHintShow := showpanel;
end;


Изначально ошибка была в том, что при создании DBGrid - он еще не имеет колонок (индексов колонок, имен колонок). Вот и обращался не пойми куда.

Но тут скорей придется в ShowPanel, отдельно проверять что это событие нужной колонки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы