Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Сохранение содержимого 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
2-1150190685
Urvin
2006-06-13 13:24
2006.07.02
Как создать SQL запрос...


1-1148291731
DmitryFox
2006-05-22 13:55
2006.07.02
Окна StayOnTop только поверх окон приложения


15-1149755789
Ega23
2006-06-08 12:36
2006.07.02
Sybase PowerDesigner - что-то туплю


15-1149437472
SupeR_St@R
2006-06-04 20:11
2006.07.02
проблема со STEAM


3-1146803964
sanchos
2006-05-05 08:39
2006.07.02
Суммирование вычисляемого поля в ADOTable