I solved in this way:
type
TUniTreeViewHelper=class helper for TUniTreeView
procedure SaveToFile(aFileName:string);
procedure LoadFromFile(aFileName:string);
end;
{ TUniTreeViewHelper }
procedure TUniTreeViewHelper.LoadFromFile(aFileName: string);
var f:textfile;
ss:Tstringlist;
s,s1:string;
i,j:integer;
ind,level:array of integer;
curlength:integer;
begin
try
assignfile(f,aFileName);
reset(f);
ss:=Tstringlist.Create;
//first pass check the owner
setlength(level,0);
repeat
readln(f,s);
s1:=s.Replace(#9,'');
ss.Add(s1);//label
setlength(level,ss.Count);
level[ss.Count-1]:=length(s)-length(s1);
until eof(f);
setlength(ind,length(level));
ind[0]:=0;
for i:=ss.Count-1 downto 1 do begin
j:=i;
repeat
dec(j);
until level[j]=level[i]-1;
ind[i]:=j;
end;
//now I create treeview
Items.Clear();
Items.Add(nil,ss[0]);
for i := 1 to length(ind)-1 do begin
if ind[i]<0 then Items.Add(nil,ss[i])
else Items.Add(Items[ind[i]],ss[i]);
end;
finally
closefile(f);
ss.Free;
end;
end;
procedure TUniTreeViewHelper.SaveToFile(aFileName: string);
var f:textfile;
i:integer;
begin
try
assignfile(f,aFileName);
rewrite(f);
for i:=0 to Items.Count-1 do begin
writeln(f,StringOfChar(#9,items[i].Level)+items[i].Text);
end;
finally
closefile(f)
end;
end;