Einzelnen Beitrag anzeigen

taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Zustand eine TreeViews speichern und wieder laden

  Alt 27. Okt 2008, 11:20
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?
Ralph
  Mit Zitat antworten Zitat