Guten Morgen, alle miteinander!
Ich habe gestern versucht, eine eigene TreeNode-Klasse in einer TreeView-Komponente zu nutzen, bin dabei aber auf Probleme gestoßen.
Nehmen wir einmal an, ich hätte meine TreeNode-Klasse folgendermaßen aufgebaut:
Delphi-Quellcode:
type
[...]
TTreeNodeErw = class ( TTreeNode )
private
FID: Integer;
public
constructor Create ( AOwner: TTreeNodes; ID: Integer );
property ID: Integer read FID write FID;
end;
[...]
implementation
[...]
{ TTreeNodeErw }
constructor TTreeNodeErw.Create ( AOwner: TTreeNodes; ID: Integer );
begin
inherited Create ( AOwner );
FID := ID;
end;
(Ist jetzt aus dem Kopf geschrieben, also nicht zu ernst nehmen).
Sinn ist es in diesem speziellen Fall, in meiner TreeView-Komponente direkt eine Baumansicht von Datenbankeinträgen zu erzeugen, die eben über die ID (FID) eindeutig angesprochen werden können. Das Modell wäre selbstverständlich erweiterbar, so dass man noch mehr Informationen direkt in den Node mit hineinpackt.
Ich kann einen TreeNode dieser Klasse auch direkt in eine TreeView-Komponente einfügen:
TreeView.Items.Add ( TTreeNodeErw.Create ( TreeView.Items, 1 ), 'Knoten 1' );
Das funktioniert. Aber wenn ich den Knoten anwähle, um mir beispielsweise die ID anzeigen zu lassen:
ShowMessage ( IntToStr ( TTreeNodeErw ( TreeView.Selected ).ID ) );
wird mir ein Zufallswert angezeigt, der irgendwo im System herumfliegt. Der TreeView scheint also wirklich nur den TTreeNode-Teil meiner TTreeNodeErw-Klasse zu verwalten. Der Rest scheint verloren zu gehen.
Jetzt meine eigentliche Frage:
Kennt jemand eine Möglichkeit, eine solche erweiterte TTreeNode-Klasse direkt in einem TTreeView zu benutzen, ohne dass man auch diesen (und damit auch die TTreeNodes-Klasse und alles, was damit zusammenhängt), ebenfalls anpacken und erweitern zu müssen?
Matthias