Форум: "Основная";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизСохранение содержимого TListView Найти похожие ветки
← →
.ruslan © (2006-05-24 10:42) [0]Добрый день, уважаемые!
В общем у меня стоит компонент 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;
…
← →
Сергей М. © (2006-05-24 10:48) [1]
> SizeOf(ListView1)
всегда = 4, хоть это к делу и не относится
← →
.ruslan © (2006-05-24 10:50) [2]в каком смысле, можно подробнее?
← →
Сергей М. © (2006-05-24 10:55) [3]в самом что ни на есть простом : ListView1 - это указатель, а размер указателя равен четырем байтам.
← →
.ruslan © (2006-05-24 10:56) [4]
> в самом что ни на есть простом : ListView1 - это указатель,
> а размер указателя равен четырем байтам.
Ну реально ли сделать сохранение чекбоксов?
← →
Сергей М. © (2006-05-24 11:02) [5]А вот это - к делу:
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;
← →
Сергей М. © (2006-05-24 11:03) [6]
> 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:13) [7][Error] Unit1.pas(192): Undeclared identifier: "SizeOfFlag"
← →
Сергей М. © (2006-05-24 11:15) [8]SizeOf(Flag)
неужто так сложно домыслить ?
← →
.ruslan © (2006-05-24 11:27) [9]Сергей, извините, но что-то ругается на цикле "Stream read error"
← →
Сергей М. © (2006-05-24 11:30) [10]Приводи свой вариант кода ..
← →
.ruslan © (2006-05-24 11:32) [11]
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:37) [12]
> .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:39) [13]всё равно ругается :(
← →
Сергей М. © (2006-05-24 11:43) [14]Приводи полный код - код записи комонента и код считывания, с учетом добавленных из моего примера циклов
← →
.ruslan © (2006-05-24 11:45) [15]запись:
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:51) [16]
> чтение:
> 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 12:04) [17]ВСЁ РАБОТАЕТ!
Огромное спасибо, Сергей!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c