Я пытаюсь найти универсальное ** решение для расширения встроенного Treeview/TreeNode с помощью некоторых функций, таких как подсказки для узла. Поэтому сначала я получил TExtendedTreeNode = class(TTreeNode)
и добавил соответствующее свойство, которое, кажется, работает нормально - я могу добавить TExtendedTreeNodes с разными подсказками для каждого узла.Lazarus (Delphi/FPC): конструктор в вспомогательном классе не выполнен
Для следующего шага я хочу использовать событие TTreeView.OnMouseMove, чтобы показать соответствующую подсказку, но каково наилучшее решение для расширения этой функциональности универсальным ** способом?
Моя идея состояла в том, чтобы использовать class helper for TTreeView
:
type
TTreeViewExtension = class helper for TTreeView
private
procedure ShowNodeToolTips(Sender: TObject; Shift: TShiftState; X, Y: Integer);
public
constructor Create(AnOwner: TComponent);
end;
...
constructor TTreeViewExtension.Create(AnOwner: TComponent);
begin
inherited Create(AnOwner);
ShowMessage('TTreeViewExtension.Create');
self.OnMouseMove := @self.ShowNodeToolTips;
end;
код компилируется без предупреждений или ошибок, но этот конструктор не выполняется на создание treeview в моей форме.
И да, я использую advancedrecords
в objfpc mode
в обоих, моя единичная форма и мой блок расширения - для того, чтобы использовать вспомогательный класс:
{$mode objfpc}{$H+}
{$modeswitch advancedrecords+}
** «универсальный» означает, что я хочу использовать интегрированные элементы управления из моей Lazarus IDE, по крайней мере, для элемента управления TreeView, но используйте расширенную функциональность, не записывая код дважды.
Создайте потомка TTreeView и переопределите его защищенный метод 'procedure MouseMove (Shift: TShiftState; X, Y: Integer); override; ' – Abelisto
Yup, не злоупотребляйте строками барокко, такими как помощники класса, если это можно сделать вперёд. Я не уверен, что помощники класса позволяют в любом случае переопределять методы. Классовые помощники - это костыль, а не швейцарская армия. –
@Marco: Я не знаю о FPC, но в Delphi помощники класса не могут переопределить виртуальные или динамические методы по понятным причинам. И действительно, это костыль, изначально предназначенный для того, чтобы сделать TObject и некоторые другие классы совместимыми с соответствующими классами C#. Они используются больше, но они остаются костылем. –