Цитата:
Slay (24.01.05 11:28)
[8]Вот пример сохранения и загрузки данных TreeView. У меня работает.
//Сохранение TreeView в файл (Base.dat)
function Save2File(Sender:TKOLTreeView): Boolean;
var
F: HFile;
procedure item2file(ind:cardinal);
var
len:cardinal;
path: String;
begin
while ind<>0 do
begin
path := sender.TVItemPath(ind,'\');
len :=length(path) ;
FileWrite( F, len,4);
FileWrite( F, path
[1], len );
if Sender.TVItemChild[ind]<>0 then item2file(Sender.TVItemChild[ind]);
ind := sender.TVItemNext[ind];
end;
end;
begin
result := false;
F := FileCreate('Base.dat', ofOpenWrite or ofCreateAlways);// or ofShareExclusive ofShareDenyRead or ofShareDenyWrite
if F = INVALID_HANDLE_VALUE then Exit;
item2file(Sender.TVRoot);
FileClose( F );
result := true;
end;
//Загрузка из файла(Base.dat) в TreeView
function LoadFromFile(Sender:TKOLTreeView): Boolean;
var
len,ind : cardinal;
F : HFile;
Path: String;
function IndPath:cardinal;
var
tmpPath,tmpText: String;
begin
tmpPath := ExtractFilePath(Path);
result := Sender.TVRoot;
tmpText := parse(tmpPath,'\');
while result<>0 do
if sender.TVItemText[result] = tmpText then
begin
if length(tmpPath)=0 then exit;
result:= sender.TVItemChild[result];
tmpText := parse(tmpPath,'\');
end else result:= sender.TVItemNext[result];
end;
begin
result := false;
F := FileCreate('Base.dat', ofOpenRead or ofOpenExisting);
if F = INVALID_HANDLE_VALUE then Exit;
Sender.BeginUpdate;
while FileRead(F,len,4)<>c0 do
begin
SetLength(Path,len);
FileRead(F,Path[1],len);
ind := IndPath;
Sender.TVInsert(ind,TVI_SORT,ExtractFileName(path))
end;
Sender.EndUpdate;
FileClose( F );
result := true;
end;
Конец цитаты.