Asunto: Guardar y cargar datos de un ListView en fichero con Delphi
¿Se pueden guardar los datos de un ListView en un fichero? ¿se pueden recuperar y mostrar en otro ListView posteriormente?
Publicado:
Jue Sep 24, 2009 8:57 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Guardar y cargar datos de un ListView en fichero con Del
Anuncios
varios escribió:
¿Se pueden guardar los datos de un ListView en un fichero? ¿se pueden recuperar y mostrar en otro ListView posteriormente?
Aquí tienes dos procedimientos, uno para guardar los datos del ListView en un fichero de texto plano y el otro para cargar los datos de un ListView a partir de los datos de un fichero:
Código:
procedure cargarListViewFichero (
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
MessageDlg ('No se ha encontrado el fichero: ' +
sFileName, mtWarning, [mbok], 0);
Exit;
end;
F := TFileStream.Create(sFileName, fmOpenRead);
F.Read(MySignature, SizeOf(MySignature));
if MySignature <> 'LVF' then
begin
MessageDlg ('El fichero : ' +
sFileName + ' no es compatible.',
mtWarning, [mbok], 0);
Exit;
end;
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;
procedure guardarListViewFichero (
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
//Initialization
with AListView do
begin
ItemCount := 0;
SubCount := 0;
//****
MySignature := 'LVF';
// ListViewFile
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;
Un ejemplo de uso para guardar el contenido del ListView:
Código:
if dlGuardar.Execute then
guardarListViewFichero(lv, dlGuardar.FileName);
Donde:
* "lv" es el nombre del ListView.
* dlGuardar: es un SaveDialog.
Un ejemplo de uso para cargar el contenido del ListView:
Código:
var
continuar : boolean;
begin
continuar := true;
if lv.Items.Count > 0 then
begin
if MessageDlg('Hay elementos que serán reemplazados ¿desea continuar?',
mtConfirmation, [mbyes,mbno], 0) = mryes then
continuar := true
else
continuar := false;
end;
if continuar then
if dlAbrir.Execute then
cargarListViewFichero(lv, dlAbrir.FileName);
Donde:
* "lv" es el nombre del ListView.
* dlAbrir: es un OpenDialog.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A