{Procedimento para salvar todos os itens do Listview} procedure TForm1.SaveListViewToFile(AListView: TListView; sFileName: string); var
idxItem, idxSub, IdxImage: Integer;
F: TFileStream;
pText: PChar;
sText: string;
W, ItemCount, SubCount: Word;
MySignature: array [0..2] of Char; begin with AListView do begin
ItemCount := 0;
SubCount := 0; //****
MySignature := 'LVF'; {Assinatura do arquivo} {Arquivo Texto}
F := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);
F.Write(MySignature, SizeOf(MySignature));
if Items.Count = 0 then // List is empty
ItemCount := 0 else
ItemCount := Items.Count;
F.Write(ItemCount, SizeOf(ItemCount));
if Items.Count > 0 then begin for idxItem := 1 to ItemCount do begin with Items[idxItem - 1] do begin //Save subitems count if SubItems.Count = 0 then
SubCount := 0 else
SubCount := Subitems.Count;
F.Write(SubCount, SizeOf(SubCount)); //Save ImageIndex
IdxImage := ImageIndex;
F.Write(IdxImage, SizeOf(IdxImage)); //Save Caption
sText := Caption;
w := Length(sText);
pText := StrAlloc(Length(sText) + 1);
StrPLCopy(pText, sText, Length(sText));
F.Write(w, SizeOf(w));
F.Write(pText^, w);
StrDispose(pText); if SubCount > 0 then begin for idxSub := 0 to SubItems.Count - 1 do begin //Save Item's subitems
sText := SubItems[idxSub];
w := Length(sText);
pText := StrAlloc(Length(sText) + 1);
StrPLCopy(pText, sText, Length(sText));
F.Write(w, SizeOf(w));
F.Write(pText^, w);
StrDispose(pText); end; end; end; end; end;
F.Free; end; end;
{Procedimento para Abrir o arquivo Salvo} 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);
F := TFileStream.Create(sFileName, fmOpenRead);
F.Read(MySignature, SizeOf(MySignature));
for idxItem := 1 to ItemCount do begin with Items.Add do begin //Read imageindex
F.Read(SubCount, SizeOf(SubCount)); //Read imageindex
F.Read(IdxImage, SizeOf(IdxImage));
ImageIndex := IdxImage; //Read the Caption
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;
{Modo de Utilização} {Botão de Salvar} procedure TForm1.Button1Click(Sender: TObject); begin // Save Items and Clear the ListView
SaveListViewToFile(ListView1, 'Meu_List_View.sav');
ListView1.Items.Clear; end;
{Botão de Abrir} procedure TForm1.Button2Click(Sender: TObject); begin // Load Items
LoadListViewToFile(ListView1, 'Meu_List_View.sav'); end;
Autor: Author: Fabio De Pasquale
Modificações: Thiago Feitosa
Espero ter colaborado com o site...