Sunday, March 11, 2007

pokracujeme

procedure TForm1.LoadListViewToFile(AListView: TListView; sFileName: string);
var
F : TFileStream;
IdxItem, IdxSubItem, IdxImage : integer;
W, ItemCount, SubCount : word;
pText : PChar;
PTemp : PChar;
MySignature : array [0..2] of char;
sExeName : string;
begin
with AListView do
begin
ItemCount := 0;
SubCount := 0;
sExeName := ExtractFileName(sFileName);
if not FileExists(sFileName) then
begin
MessageBox(Handle, PChar(format(Msg1, [sExeName])), 'I/O Error', MB_ICONERROR);
Exit;
end;
F := TFileStream.Create(sFileName, fmOpenRead);
F.Read(MySignature, sizeof(MySignature));
if MySignature <> 'LVF' then
begin
MessageBox(Handle, PChar(format(Msg2, [sExeName])), 'I/O Error', MB_ICONERROR);
Exit;
end;
F.Read(ItemCount, sizeof(ItemCount));
Items.Clear;
for idxItem := 1 to ItemCount do
begin
with Items.Add do
begin
F.Read(SubCount, sizeof(SubCount));
F.Read(IdxImage, sizeof(IdxImage));
ImageIndex := IdxImage;
F.Read(w, SizeOf(w));
pText := StrAlloc(w + 1);
pTemp := StrAlloc(w + 1);
F.Read(pTemp^, W);
StrLCopy(pText, pTemp, W);
Caption := StrPas(pText);
StrDispose(pTemp);
StrDispose(pText);
if SubCount > 0 then
begin
for idxSubItem := 1 to SubCount do
begin
F.Read(w, SizeOf(w));
pText := StrAlloc(w + 1);
pTemp := StrAlloc(w + 1);
F.Read(pTemp^, W);
StrLCopy(pText, pTemp, W);
Items[idxItem - 1].SubItems.Add(StrPas(pText));
StrDispose(pTemp);
StrDispose(pText);
end;
end;
end;
end;
F.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveListViewToFile(ListView1, 'Data.sav');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
LoadListViewToFile(ListView1, 'Data.sav');
end;

Labels: