Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: VCL / WinForms / Controls (https://www.delphipraxis.net/24-library-vcl-winforms-controls/)
-   -   Delphi TreeView in ini speichern/aus ini lesen (https://www.delphipraxis.net/21340-treeview-ini-speichern-aus-ini-lesen.html)

FriFra 1. Mai 2004 09:00


TreeView in ini speichern/aus ini lesen
 
Mit den folgenden beiden Funktionen kann man die Nodes eines TreeView in eine ini speichern, bzw. aus einer ini lesen.

Delphi-Quellcode:
procedure TreeToIni(Tree: TTreeView; INI: TIniFile; Section: string);
var
  n: integer;
  MS: TMemoryStream;
  tTv: TStringList;
  Msg: string;
begin
  tTv := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    Tree.SaveToStream(MS);
    MS.Position := 0;
    tTv.LoadFromStream(MS);
    INI.EraseSection(Section);
    for n := 0 to tTv.Count - 1 do
      INI.WriteString(Section, 'Node' + IntToStr(n), StringReplace(tTv[n], #9,
        '#', [rfReplaceAll]));
  finally
    tTv.Free;
    MS.Free;
  end;
end;

procedure TreeFromIni(Tree: TTreeView; INI: TIniFile; Section: string;
  Expand: boolean);
var
  n: integer;
  MS: TMemoryStream;
  tTv: TStringList;
  Msg: string;
begin
  tTv := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    INI.ReadSection(Section, tTv);
    for n := 0 to tTv.Count - 1 do
      tTv[n] := StringReplace(INI.ReadString(Section, tTv[n], ''), '#', #9,
        [rfReplaceAll]);
    tTv.SaveToStream(MS);
    MS.Position := 0;
    Tree.LoadFromStream(MS);
    if (Expand = True) and (Tree.Items.Count > 0) then
    begin
      Tree.Items[0].Expand(True);
      Tree.Items[0].MakeVisible;
    end;
  finally
    tTv.Free;
    MS.Free;
  end;
end;

alcaeus 1. Mai 2004 21:54

Re: TreeView in ini speichern/aus ini lesen
 
Also, ich habe mir mal erlaubt, den Code von FriFra abzuändern. Nun wird für jedes Item gespeichert, ob es auf- oder zugeklappt ist.
Delphi-Quellcode:
procedure TreeToIni(Tree: TTreeView; INI: TIniFile; Section: string);
var
  n: integer;
  MS: TMemoryStream;
  tTv: TStringList;
begin
  tTv := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    Tree.SaveToStream(MS);
    MS.Position := 0;
    tTv.LoadFromStream(MS);
    INI.EraseSection(Section);
    for n := 0 to tTv.Count - 1 do
      INI.WriteString(Section, 'Node' + IntToStr(n), StringReplace(tTv[n], #9,
        '#', [rfReplaceAll])+#1+BoolToStr(Tree.Items[n].Expanded,True));
  finally
    tTv.Free;
    MS.Free;
  end;
end;

procedure TreeFromIni(Tree: TTreeView; INI: TIniFile; Section: string;
  Expand: boolean);
var
  n, PosDel: integer;
  MS: TMemoryStream;
  tTv: TStringList;
  Temp: String;
begin
  tTv := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    INI.ReadSection(Section, tTv);
    for n := 0 to tTv.Count - 1 do
    begin
      Temp := StringReplace(INI.ReadString(Section, tTv[n], ''), '#', #9,
        [rfReplaceAll]);
      PosDel := Pos(#1,Temp);
      Delete(Temp,PosDel,Length(Temp)-PosDel+1);
      tTv[n] := Temp;
    end;
    tTv.SaveToStream(MS);
    MS.Position := 0;
    Tree.LoadFromStream(MS);
    if (Expand = True) and (Tree.Items.Count > 0) then
    begin
      INI.ReadSection(Section, tTv);
      for n := 0 to tTv.Count - 1 do
      begin
        tTv[n] := StringReplace(INI.ReadString(Section, tTv[n], ''), '#', #9,
          [rfReplaceAll]);
        PosDel := Pos(#1,tTv[n]);
        if StrToBool(Copy(tTv[n],PosDel+1,Length(tTv[n])-PosDel)) then
          Tree.Items[n].Expand(False);
      end;
    end;
  finally
    tTv.Free;
    MS.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz