Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

TListView   Найти похожие ветки 

 
Mortal   (2003-06-12 13:33) [0]

Уважаемые мастера, может кто-нибудь привести пример сохранения и загрузки данных компонента ListView из фаила.
Заранее спасибо.


 
Spawn   (2003-06-12 13:48) [1]

Например так:

procedure Save;
var
I,J:integer;
List:TStringList;
begin
List:=TStringList.Create;
try
for i:=0 to ListView1.Items.Count-1 do
begin
List.Add(ListView1.Items[i].Caption);
List.Add("@"+IntToStr(ListView1.Items[i].ImageIndex));
for j:=0 to ListView1.Items[i].SubItems.Count-1 do
List.Add(#9+ListView1.Items[i].SubItems[j];
end;
List.SaveToFile(ExtractFilePath(Application.ExeName)+"Items.txt");
finally
List.Free;
end;
end;

procedure Load;
var
List:TStringList;
NewItem:TListItem;
I:integer;
begin
NewItem:=nil;
ListView1.Items.Clear;
List:=TStringList.Create;
try
List.LoadFromFile(ExtractFilePath(Application.ExeName + "Items.txt");
for i:=0 to List.Count-1 do
if List[i][1]=#9 then
NewItem.SubItems.Add(Trim(List[i]))
else
if List[i][1]="@" then
NewItem.ImageIndex:=StrToIntDef(List[i][2],0);
else
begin
NewItem:=ListView1.Items.Add;
NewItem.Caption:=List[i];
end;
finally
List.Free;
end;
end;


 
dataMaster   (2003-06-12 16:30) [2]

procedure LV_SaveToFile(LV: TListView; Signature, FileName: string);
var
idxItem, idxSub, IdxImage: Integer;
F: TFileStream;
pText: PChar;
sText: string;
W, ItemCount, SubCount: Word;
MySignature: array [0..2] of Char;
begin
with LV do
begin
ItemCount := 0;
SubCount := 0;
StrPCopy(MySignature, Signature);
F := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
F.Write(MySignature, SizeOf(MySignature));
if Items.Count = 0 then
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
if SubItems.Count = 0 then
SubCount := 0
else
SubCount := Subitems.Count;
F.Write(SubCount, SizeOf(SubCount));
IdxImage := ImageIndex;
F.Write(IdxImage, SizeOf(IdxImage));
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
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;

procedure LV_LoadFromFile(LV: TListView; Signature, FileName: 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 LV do
begin
ItemCount := 0;
SubCount := 0;
sExeName := ExtractFileName(FileName);
if not FileExists(FileName) then
Exit;
F := TFileStream.Create(FileName, fmOpenRead);
F.Read(MySignature, SizeOf(MySignature));
if MySignature <> Signature then
Exit;
F.Read(ItemCount, SizeOf(ItemCount));
Items.Clear;
for idxItem := 1 to ItemCount do
begin
with Items.Add do
begin
F.Read(SubCount, SizeOf(SubCount));
F.Read(IdxImage, SizeOf(IdxImage));
ImageIndex := IdxImage;
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;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.026 c
3-83951
yaric
2003-06-03 21:45
2003.06.26
Временные курсоры в теле хранимых процедур


14-84729
McSimm
2003-06-05 16:41
2003.06.26
Внимание. Вирус - подделка на рассылку сайта !


11-84058
Garrison
2002-08-21 14:08
2003.06.26
Хочу :))


4-84838
Silver_
2003-04-25 18:31
2003.06.26
Клаву


1-84198
VISA
2003-06-12 11:09
2003.06.26
Как оставить на форме только 2 системные кнопки?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский