![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение содержимого TListView [D7, WinXP]
.ruslan © (2006-05-24 10:42:00)Добрый день, уважаемые!
В общем у меня стоит компонент TListView, его содержимое я сохранить смог, да и загружается всё нормально, всё работает, но: не сохраняются checkbox’ы а итемах, как быть, подскажите, если не сложно.
Вот код сохранения который я использую:
…
var
Writer : TWriter;
FileStream : TFileStream;
begin
FileStream:=TFileStream.Create(extractfilepath(application.ExeName)+ '\base.ini',fmOpenWrite or fmCreate);
Writer := TWriter.Create(FileStream, SizeOf(ListView1));
Writer.WriteRootComponent(ListView1);
Writer.Free;
FileStream.Free;
…
.ruslan (2006-05-24 12:04:00) [1]ВСЁ РАБОТАЕТ!
Огромное спасибо, Сергей!
Сергей М. (2006-05-24 11:51:00) [2]
> чтение:
> procedure TMAIN.FormCreate(Sender: TObject);
> var
> FileStream:TFileStream;
> Flag:Boolean;
> i:integer;
> begin
> FileStream:=TFileStream.Create(extractfilepath(application.
> ExeName)+ '\data.dat', fmOpenRead); // or fmCreate - это не нужно
> try
> FileStream.ReadComponent(ListView1);
> for i := 0 to ListView1.Items.Count - 1 do begin
> FileStream.ReadBuffer(Flag, SizeOf(Flag));
> ListView1.Items[i].Checked := Flag;
> end;
> finally
> FileStream.Free;
> end;
> end;
>
И на какой строчке теперь "ругается" ?
.ruslan (2006-05-24 11:45:00) [3]запись:
procedure TMAIN.FormClose(Sender: TObject; var Action: TCloseAction);
var
FileStream:TFileStream;
Flag:Boolean;
i:integer;
begin
FileStream:=TFileStream.Create(extractfilepath(application.ExeName)+ '\data.dat',fmOpenWrite or fmCreate);
try
FileStream.WriteComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
Flag := ListView1.Items[i].Checked;
FileStream.WriteBuffer(Flag, SizeOf(Flag));
end;
finally
FileStream.Free;
end;
end;
чтение:
procedure TMAIN.FormCreate(Sender: TObject);
var
FileStream:TFileStream;
Flag:Boolean;
i:integer;
begin
FileStream:=TFileStream.Create(extractfilepath(application.ExeName)+ '\data.dat',fmOpenRead or fmCreate);
try
FileStream.ReadComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
FileStream.ReadBuffer(Flag, SizeOf(Flag));
ListView1.Items[i].Checked := Flag;
end;
finally
FileStream.Free;
end;
end;
Сергей М. (2006-05-24 11:43:00) [4]Приводи полныйкод - код записи комонента и код считывания, с учетом добавленных из моего примера циклов
.ruslan (2006-05-24 11:39:00) [5]всё равно ругается :(
Сергей М. (2006-05-24 11:37:00) [6]
> .ruslan © (24.05.06 11:32) [11]
var
FileStream : TFileStream;
Flag: Boolean;
//этот код для записи компонента в поток
FileStream:=TFileStream.Create(...);
try
FileStream. WriteComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
Flag := ListView1.Items[i].Checked;
FileStream. WriteBuffer(Flag, SizeOfFlag);
end;
finally
FileStream.Free;
end;
..
//а этот код для последующего чтения компонента из потока
FileStream:=TFileStream.Create(...);
try
FileStream. ReadComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
FileStream. ReadBuffer(Flag, SizeOfFlag);
ListView1.Items[i].Checked := Flag;
end;
finally
FileStream.Free;
end;
.ruslan (2006-05-24 11:32:00) [7]
procedure TMAIN.FormCreate(Sender: TObject);
var
FileStream:TFileStream;
Flag:Boolean;
i:integer;
begin
FileStream:=TFileStream.Create(extractfilepath(application.ExeName)+ '\base.ini',fmOpenRead or fmCreate);
try
FileStream.ReadComponent(ListView1);
for i:=0 to ListView1.Items.Count-1 do
begin
FileStream.ReadBuffer(Flag, SizeOf(Flag));
ListView1.Items[i].Checked:=Flag;
end;
finally
FileStream.Free;
end;
end;
Сергей М. (2006-05-24 11:30:00) [8]Приводи свой вариант кода ..
.ruslan (2006-05-24 11:27:00) [9]Сергей, извините, но что-то ругается на цикле "Stream read error"
Сергей М. (2006-05-24 11:15:00) [10]SizeOf (Flag )
неужто так сложно домыслить ?
.ruslan (2006-05-24 11:13:00) [11][Error] Unit1.pas(192): Undeclared identifier: 'SizeOfFlag'
Сергей М. (2006-05-24 11:03:00) [12]
> FileStream:=TFileStream.Create(...);
> try
> FileStream. ReadComponent(ListView1);
> for i := 0 to ListView1.Items.Count - 1 do begin
> FileStream. ReadBuffer(Flag, SizeOfFlag);
> ListView1.Items[i].Checked := Flag;
> end;
> finally
> FileStream.Free;
> end;
Сергей М. (2006-05-24 11:02:00) [13]А вот это - к делу:
var
FileStream : TFileStream;
Flag: Boolean;
begin
FileStream:=TFileStream.Create(...);
try
FileStream.WriteComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
Flag := ListView1.Items[i].Checked;
FileStream.WriteBuffer(Flag, SizeOfFlag);
end;
finally
FileStream.Free;
end;
..
FileStream:=TFileStream.Create(...);
try
FileStream.WriteComponent(ListView1);
for i := 0 to ListView1.Items.Count - 1 do begin
FileStream.ReadBuffer(Flag, SizeOfFlag);
ListView1.Items[i].Checked := Flag;
end;
finally
FileStream.Free;
end;
.ruslan (2006-05-24 10:56:00) [14]
> в самом что ни на есть простом : ListView1 - это указатель,
> а размер указателя равен четырем байтам.
Ну реально ли сделать сохранение чекбоксов?
Сергей М. (2006-05-24 10:55:00) [15]в самом что ни на есть простом : ListView1 - это указатель, а размер указателя равен четырем байтам.
.ruslan (2006-05-24 10:50:00) [16]в каком смысле, можно подробнее?
Сергей М. (2006-05-24 10:48:00) [17]
> SizeOf(ListView1)
всегда = 4, хоть это к делу и не относится