Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView in ini speichern... (https://www.delphipraxis.net/21311-treeview-ini-speichern.html)

FriFra 30. Apr 2004 18:28


TreeView in ini speichern...
 
Ich würde gern vermeiden mehrere Konfigurationsdateien für mein Programm zu erstellen, deshalb wäre es nicht schlecht, den Treeview auch mit in der ini zu sichern.
Mir fehlt momentan nur noch eine brauchbare Idee, wie ich einen Treeview in einer ini abbilden kann.

SirThornberry 30. Apr 2004 18:37

Re: TreeView in ini speichern...
 
Wenns keine maximale zeilenlänge gibt in der ini könntest du das Treeview in einen Stream speichern und alle eingabetasten ersetzen. Alternativ zur Inidatei könntest du noch ein virtuelles dateisystem nehmen das in einer datei abgebildet ist oder eine zipdatei und dort deine daten reinpacken

mirage228 30. Apr 2004 18:42

Re: TreeView in ini speichern...
 
Zu einem TreeView würde doch eine XML-Datei perfekt passen!

mfG
mirage228

FriFra 1. Mai 2004 08:57

Re: TreeView in ini speichern...
 
Zitat:

Zitat von mirage228
Zu einem TreeView würde doch eine XML-Datei perfekt passen!

mfG
mirage228

Passen würde das schon, aber diese Lösung würde überdimensional aufgeblähte Dateien erzeugen.


Ich habe es jetzt gelöst ;)
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
      Tree.Items[0].Expand(True);
  finally
    tTv.Free;
    MS.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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