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]