Moin, Moin Rolf
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:
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;
Optional könnte man den Stream jetzt noch komprimieren/dekomprimieren.
//edit: Ist das nicht eher ein
VCL-Thema?