Noch mal von vorne:
Die möglichkeit des arrays sind nicht sehr rosig, da trotz dynamischer grösse, immer ein grosser klumpen bleibt. Es wird eine liste von pointern benötigt. Worum nicht eine TListe nehmen oder TObjektliste nehmen? Das spart ärger und zeit. Wenn man aber vorerst nicht zu grossen wert auf die trennung von
Model und
Control legt, dann könnte man die infrastruktur der TreeNodes nutzen und die daten darin kapseln. Dh. im klartext jeder treenode hat zB. eine property
movies. Und TreeView.items dient als grosse liste für den zugriff:
Delphi-Quellcode:
TMovies = class(TStringList)
private
end;
TMyTreenode = class(TTreeNode)
private
function GetMovies: TMovies;
public
destructor destroy; override;
procedure AfterConstruction; override;
published
Property Movies:TMovies read GetMovies;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyTreenode }
procedure TMyTreeNode.AfterConstruction; override;
begin
data := TMovies.create;
end;
destructor TMyTreenode.destroy;
begin
TObject(data).Free;
data := nil;
inherited;
end;
function TMyTreenode.GetMovies: TMovies;
begin
result := TMovies(data);
end;
{ TForm1 }
// event des treeViews
procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
// sagen, dass die nodes von der folgenden klasse sein sollen
NodeClass := TMyTreeNode;
end;
procedure TForm1.CreateNode;
begin
with TreeView1 do
if assigned(Selected) then
Items.AddChild(Selected, InputBox('Sag', 'wie soll mein name sein', 'Node'));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateNode;
end;
fertig. und einfach benutzen:
(treeView.items[i] as TMyTreeNode).Moview.Add('delphi der film')
was meint ihr?
//edit:bugs\\
//edit2:Leider noch keine generics
mâxîmôv.
{KDT}