Einzelnen Beitrag anzeigen

waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Treviw in Ini incl. DataEigenschaft sichern

  Alt 12. Jun 2005, 10:43
Hallo,
zuerst einmal vielen Dankf für die Tipps.
wie Andreas beschreibt reicht mir nicht, nur den Pointer zu sichern, ich benötige den Inhalt.

Was benötige ich ?

Ich baue mir über den Tree stufenweise eine Inventarnummer (String) zusammen, die es ermöglicht, in einem separaten Grid die Selektion zu verfeinern. Da der erste Aufbau relativ lange dauert, TreeView wird durch Auslesen einer großen Datei mit Teilstring der Inventarnummer. Da sich die Inhalte der Datei nicht ändern ist es sinnvoll, einmal diesen TreeView aufzubauen und anschließend aus einer INI.-Datei zu laden.
Das Wegschreiben in die Inidatei funtioniert sauber. Ich habe nun, ich denke ein Anfängerproblem, nur noch die Schwierigleit nach dem Lesen der Datei die Infos wieder dem entsprechenden Kontoen in die Datamethode zu schreiben.

mfg Thom

Delphi-Quellcode:
procedure TQueryForm.TreeToIni(Tree: TTreeView; INI: TIniFile; Section: string);
var
  n: integer;
  MS: TMemoryStream;
  tTv: TStringList;
  node : 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]));

    for n := 0 to tTv.Count - 1 do
    begin
       Tree.Select(Tree.Items[n]);
       node := STRING(TreeView1.Selected.data^);
       INI.WriteString(Section+'_Data', 'Data' + IntToStr(n), node);
    end;

  finally
    tTv.Free;
    MS.Free;
  end;
end;


procedure TQueryForm.TreeFromIni(Tree: TTreeView; INI: TIniFile; Section: string;
  Expand: boolean);
var
  n: integer;
  MS: TMemoryStream;
  tTv: TStringList;
  tTDat: TStringList;
  id :Pstring;
  node :TTReeNode;

begin
  tTv := TStringList.Create;
  tTDat := 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;

   

    INI.ReadSection(Section+'_Data', tTDat);
    for n := 0 to tTDat.Count - 1 do
    begin
      Tree.Select(Tree.Items[n]);
      node := Tree.Selected;
      new(id);

////// Hier fehlt mir noch die Möglichkeit den Wert wieder in die Data-Methode zu bekommen. Sicher nur ne kleinigkeit, die einem "Anfänger" aber so seine Probleme macht.
      id^:= tTDat.Values[tTDat.Strings[n]];


      node.Data :=id;
    end;

  finally
    tTv.Free;
    tTDat.Free;
    MS.Free;
  end;
end;
[edit=alcaeus]Delphi-Tags korrigiert. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat