Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1149954352
Fiallo4ka
2006-06-10 19:45
2006.07.02
заполнение таблиц в базе


15-1149624790
DevilDevil
2006-06-07 00:13
2006.07.02
ФриЛанс (удалённая работа)


15-1149513475
infom
2006-06-05 17:17
2006.07.02
Компоненты для работы с большими целыми числами.


4-1143610279
TAK
2006-03-29 09:31
2006.07.02
Как получить командную строку процесса?


3-1146831909
TheEd
2006-05-05 16:25
2006.07.02
IBX: Связь master-detail в запросах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский