Hab hier mal 'nen
noch ungetesteten Code zum Speichern und Laden eines TTreeView.
Gespeichert wird natürlich der .Text und die ganzen Subnodes ... also die ganze Baum-Struktur des Trees
und beim Rest kann man entschieden werden, was man speichern/laden will.
Da wären die ganzen Bildindize .ImageIndex, .SelectedIndex, .StateIndex, .ExpandedImageIndex
und .OverlayIndex, außerdem .Enabled und die Zustände .Selected, .Focused und .Expanded,
für jeden einzelnen Node.
Ein TVirtualStringTree wird auch bald folgen, dort wird .Data dann ebenso über einen Callback gespeichert und geladen.
Delphi-Quellcode:
Type TSTVProc = Procedure(Node: TXMLNode; TVNode: TTreeNode);
TSTVSavedData = Set of (ssImageIndex, ssSelectedIndex, ssStateIndex, ssExpandedIndex,
ssOverlayIndex, ssEnabled, ssSelected, ssFocused, ssExpanded, ssData);
Const ssDefault = [ssImageIndex..ssSelected, ssExpanded];
Procedure SerializeTreeView(Node: TXMLNode; TreeView: TTreeView;
Save: TSTVSavedData = ssDefault; DataProc: TSTVProc = nil);
Procedure DeserializeTreeView(Node: TXMLNode; TreeView: TTreeView;
Load: TSTVSavedData = ssDefault; DataProc: TSTVProc = nil);
benutzen
Delphi-Quellcode:
Var XML: TXMLFile;
Node: TXMLNode;
// speichern
XML := TXMLFile.Create;
Node :=
XML.AddNode('
MyTreeView');
SerializeTreeView(Node, TreeView1);
XML.SaveToFile('
file.xml');
XML.Free;
// laden
XML := TXMLFile.Create;
XML.LoadFromFile('
file.xml');
Node :=
XML.Node['
MyTreeView'];
DeserializeTreeView(Node, TreeView1);
XML.Free;
Dieser und ähnliche Codes werden allerdings wohl nie direkt im Projekt enthalten sein, da sie einfach zu speziell sind,
aber es ist eine kleine Abteilung auf der zukünftigen Webseite vorgesehn.
[edit]
der ganze Code kommt gleich wieder ... dann als Anhang in 'ner eigenen Unit
so, da isser wieder
[add]
nun auch getestet, etwas geändert und mit Beispiel, siehe Bild