Hi Luckie.
Du könntest einen Blick in den Quellcode meines
YAAM werfen (s.
OpenSource). Da habe ich das gemacht, um im TreeView sowohl die Registry-Autostarts als auch die NT-Dienste anzuzeigen. Die Lösung ist jedenfalls die "Data"-Membervariable:
Code:
[b]type[/b]
PTreeViewObj = ^TTreeViewObj;
TTreeViewObj =
[b]packed[/b] [b]record[/b]
Termin : [b]string[/b];
[b]end[/b];
[color=#000080][i]{ ... }[/i][/color]
[b]var[/b]
p : TreeViewObj;
tn : TTreeNode;
[color=#000080][i]{ ... }[/i][/color]
p^.Termin := 'Blumen kaufen, & Pauschalentschuldigung aussprechen';
tn := TreeView.Items.AddObject([b]nil[/b],'Heute',p);
Und die Anzeige habe ich bei
YAAM im "OnChange"-Event des TreeViews gemacht:
Code:
[b]var[/b]
li : TListItem;
[color=#000080][i]{ ... }[/i][/color]
[b]with[/b] ListView1,Items [b]do[/b]
[b]begin[/b]
BeginUpdate;
Clear;
[b]if[/b](Node.Data <> [b]nil[/b]) [b]then[/b]
[b]begin[/b]
li := Add;
li.Caption := PTreeViewObj(Node.Data)^.Termin;
[b]end[/b];
EndUpdate;
[b]end[/b];
Da ich aber auch mehrere Einträge anzeigen lassen wollte/musste, habe ich in das o.g. Objekt zwei Knoten eingefügt, um mich quasi durch die Kette zu hangeln:
Code:
[b]type[/b]
PTreeViewObj = ^TTreeViewObj;
TTreeViewObj =
[b]packed[/b] [b]record[/b]
[color=#000080][i]{ ... }[/i][/color]
left,
right : PTreeViewObj;
[b]end[/b];
Das heißt, du könntest einen Eintrag auslesen, dann setzt du den Pointer auf den Wert von rechts, liest den nächsten Eintrag ... und wiederholst das solange, bis "right"
nil ist.
Wie gesagt: in dem
Autostartmanager findest du ein ausführliches Beispiel dafür. Auch, wie man diese Kette aufbaut und beim Beenden des Programms korrekt freigibt, damit keine Reste bleiben.
Gruß,
Mathias.