Jeder Knoten hat ein Attribut Data. Diesem kannst Du einen Zeiger auf Deinen Record zuweisen.
Der TTreeView hat ein Ereignis onCompare.
In dem Ereignis Compare stehen Dir die beiden zu vergleichenden Knoten zur Verfügung.
Die Vergleichsmethode, die Du dort implementierst, könnte (von der Grundidee) z. B. so aussehen:
Delphi-Quellcode:
procedure TfmSHSMain.tvCompareSeite(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer);
var
s1 : String;
s2 : String;
begin
if Assigned(Node1.Data) and Assigned(Node2.Data) then begin
s1 := Format('%s%s%s',[PMyTreeRec(Node1.Data)^.FilePath,PMyTreeRec(Node1.Data)^.Parent,PMyTreeRec(Node1.Data)^.Titel]);
s2 := Format('%s%s%s',[PMyTreeRec(Node2.Data)^.FilePath,PMyTreeRec(Node2.Data)^.Parent,PMyTreeRec(Node2.Data)^.Titel]);
Compare := CompareText(s1,s2);
end else begin
Compare := CompareText(Node1.Text,Node2.Text);
end;
end;
Das Sortieren des Baumes könnte dann z. B. in dieser Art erfolgen:
Delphi-Quellcode:
procedure TfmSHSMain.acBaumSortierenExecute(Sender: TObject);
begin
tv.SortType := stBoth; // tv ist der TTreeView
tv.Items.AlphaSort(true);
end;