![]() |
Zustand eine TreeViews speichern und wieder laden
Hallo zusammen,
ich habe in meinem Programm Code-Orakel ja einen TreeView. Ich möchte nun die Möglichkeit bieten, dass der Zustand des TreeViews gespeichert wird und beim nächsten mal Starten die gleichen Nodes wieder erweitert sind, wie vor dem schliessen. Wie würdet Ihr da vorgehen ? Registry fällt flach, da das Programm unabhängig vom PC sein soll. Edit: Das ich den Tree druchgehen muss ist mir schon klar. |
Re: Zustand eine TreeViews speichern und wieder laden
Falls die eingesetzte Tree-Komponente nichts bietet würde ich das mit XML machen.
|
Re: Zustand eine TreeViews speichern und wieder laden
Zitat:
|
Re: Zustand eine TreeViews speichern und wieder laden
Moin, Moin Rolf :hi:
War ja mein Wunsch und bisher hatte ich auch noch keine Lösung dafür. Habe daher mal überlegt, wie man das Lösen könnte. Hier mein Vorschlag:
Delphi-Quellcode:
Optional könnte man den Stream jetzt noch komprimieren/dekomprimieren.
procedure TfoTest03.LoadTree(TV:TTreeView;FName:String);
var MS : TMemoryStream; i,Count : Integer; NodeState : Boolean; begin MS:=TMemoryStream.Create; try MS.LoadFromFile(FName); MS.Read(Count,SizeOf(Count)); MS.Seek(Count,soFromCurrent); // jump to start of node data TV.Items.BeginUpdate; TV.LoadFromStream(MS); // load nodes MS.Seek(SizeOf(Count),soFromBeginning); // jump back to start of expand data for i:=0 to Count-1 do begin MS.Read(NodeState,SizeOf(NodeState)); TV.Items[i].Expanded:=NodeState // load node expand state end; TV.Items.EndUpdate finally MS.Free end end; procedure TfoTest03.SaveTree(TV:TTreeView;FName:String); var MS : TMemoryStream; i,Count : Integer; NodeState : Boolean; begin MS:=TMemoryStream.Create; try Count:=TV.Items.Count; MS.Write(Count,SizeOf(Count)); for i:=0 to Count-1 do begin // save node expand state NodeState:=TV.Items[i].Expanded; MS.Write(NodeState,SizeOf(NodeState)); end; TV.SaveToStream(MS); // save nodes MS.SaveToFile(FName) finally MS.Free end end; //edit: Ist das nicht eher ein VCL-Thema? |
Re: Zustand eine TreeViews speichern und wieder laden
Hallo Ralph,
danke für Dein Beispiel. Werde es mal ausprobieren und dann hier berichten ob es funktioniert hat. Zitat:
|
Re: Zustand eine TreeViews speichern und wieder laden
Zitat:
Gruß -- |
Re: Zustand eine TreeViews speichern und wieder laden
Zitat:
Edit: Nach der Datenbankabfrage sollen dann die Nodes auf Expand = True oder False gesetzt werden. So wie beim letzten schliessen der Anwendung es gespeichert wurde. |
Re: Zustand eine TreeViews speichern und wieder laden
Moin, Moin Zusammen!
Die Frage von Calculon ist berechtigt! Mit der von mir vorgestellten Lösung werden die Icons nicht gesichert. Abhilfe ist aber sehr leicht möglich, wenn Lesen/Schreiben des Streams geändert wird:
Delphi-Quellcode:
Alternativ könnte man natürlich auch die Zustände von ImageIndex, StateIndex und SelectedIndex mit dem gleichen Verfahren behandeln mit dem im Beispiel der NodeStatus gesichert/wiederhergestellt wird.
// TV.LoadFromStream(MS) // load nodes, change to:
MS.ReadComponent(TV) // load nodes AND icons // bzw. // TV.SaveToStream(MS); // save nodes, change to: MS.WriteComponent(TV); // save nodes AND icons // edit Zitat:
|
Re: Zustand eine TreeViews speichern und wieder laden
Zitat:
Gruß -- |
Re: Zustand eine TreeViews speichern und wieder laden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz