Hi, onkelrossie,
ich würde das Problem vermutlich so angehen:
Schritt 1: Im Speicher die neue, hierarchische Struktur aufbauen, so wie du's unter * beschrieben hast, z.B ein dynamisches Array, etwa
Delphi-Quellcode:
type
TSubNodeRecord = record
// Alles, was du brauchst, um dir auf Zuruf des VT (OnGetText etc.) die Daten zu holen.
// Hier reicht unter Umständen eine ID, ein Bookmark o.ä., d.h. du benötigst nicht
// zwangsweise eine Kopie der Daten.
end;
TRootNodeRecord = record
Name: string; // 'Artikel' oder 'Ware'
SubNodes: array of TSubNodeRecord;
end;
var
RootNodes: array of TRootNodeRecord;
Schritt 2: Lerne die Eigenheiten des VT
- schau dir z.B. mal das Minimal-Demo an.
Schritt 3: Setze die übliche VT-Litanei um:
- Definiere ein geeignetes Record für GetNodeData (TMyRec im Demo).
In deinem Fall vielleicht
Delphi-Quellcode:
TNodeData = record
case IsRootNode: Boolean of // Root- oder SubNode
True: (pRoot: PRootNodeRecord);
False: (pSub: PSubNodeRecord);
end;
Vergiss nicht, NodeDataSize entsprechend zu initialisieren.
- Nach dem Aufbereiten deiner Hierarchie setzeVT.RootNodeCount := Length(RootNodes);
- Im OnInitNode-Handler initialisiere Data gemäß des NodeLevels als Root- oder SubNode.
Bei RootNodes setze ivsHasChildren in InitialStates.
- Der OnInitChildren-Handler wird (wegen ivsHasChildren ) für alle RootNodes aufgerufen.
Hole dir dort per GetNodeData die Daten des Knotens. Setze ChildCount := Length(Data.pRoot^.SubNodes)
- Schließlich musst du noch OnGetText implementieren ==> Übung für den Leser.
HTH, Uli.