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

Вниз

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

 
Lina   (2003-08-26 14:51) [0]

Можно ли данные ListView сохранить в поток


 
Карелин Артем ©   (2003-08-26 14:55) [1]

Ну там наверно есть Items или Lines, у которых есть SaveToStream метод...


 
Calm ©   (2003-08-26 14:56) [2]

Не понятен вопрос

Судя по наличию в классе TStream методов ReadComponent и WriteComponent, можно.

Может имелось ввиду что-то другое?


 
Lina   (2003-08-26 14:58) [3]


> Ну там наверно есть Items или Lines

Ну наверное если бы там такое было , то я бы и не спрашивала


 
Lina   (2003-08-26 15:01) [4]


> Calm

Мне нужно сохранить в поток данные из одного List и загрузить их во второй


 
Miralex ©   (2003-08-26 15:06) [5]

а чего ты не можешь сохранить так ListBox1.Items.SaveToFile и потом загрузить в какойто другой?


 
Lina   (2003-08-26 15:08) [6]

А при чем здесь ListBox1


 
MBo ©   (2003-08-26 15:08) [7]

Встроенного метода нет, придется перебирать и руками сохранять


 
Skier ©   (2003-08-26 15:09) [8]

>Lina (26.08.03 14:51)
Руками, т.к. злобные программисты Borland-a не написали нужных
тебе методов. :)


 
Doctor Deejay ©   (2003-08-26 15:12) [9]


> Lina


Ручками... всё ручками :)


 
Карелин Артем ©   (2003-08-26 15:13) [10]

Приношу свои извинения. Подумалось про TListBox и аналогичные компоненты. А сохранять можно только "ручками"


 
Miralex ©   (2003-08-26 15:15) [11]


> А при чем здесь ListBox1


Ето я проглядел!

пиши
var Source : TStrings;

Source:=TstringList.Create;
Source.Clear;
for i:=0 to List.Count-1 do
begin
Source.Add(List.Items[i]);
end;

Source.SaveToFile(c:\test.txt);

Могуть быть ошибки потому что писал по памяти!


 
dataMaster ©   (2003-08-26 16:15) [12]

Такое?


procedure LV_SaveFile(LV: TListView; Signature, FileName: string);
var
idxItem, idxSub, IdxImage: Integer;
F: TFileStream;
pText: PChar;
sText: string;
W, ItemCount, SubCount: Word;
MySignature: array [0..7] 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_LoadFile(LV: TListView; Signature, FileName: string);
var
F: TFileStream;
IdxItem, IdxSubItem, IdxImage: Integer;
W, ItemCount, SubCount: Word;
pText: PChar;
PTemp: PChar;
MySignature: array [0..7] 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;


 
MBo ©   (2003-08-26 17:02) [13]

>dataMaster
прокомментировать?


 
Юрий Федоров ©   (2003-08-26 17:10) [14]

>dataMaster
Перемудрил, можно в 4 раза короче тоже самое, но как пример самое то что надо :-)


 
dataMaster ©   (2003-08-26 17:12) [15]

2MBo © (26.08.03 17:02) [13]

>dataMaster
>прокомментировать?

А что комментировать? Это не я придумал. Где-то в сети давно нашел. Сохранение-загрузка содержимого ListView"а. Или что-то не так?


 
MBo ©   (2003-08-26 17:17) [16]

>dataMaster
ОК. Просто бросилось в глаза - перлы типа

if Items.Count = 0 then
ItemCount := 0
else
ItemCount := Items.Count;

и ненужное преобразование строк в PChar


 
DVM ©   (2003-08-26 20:46) [17]

сохранить то можно, но бывають случаи, когда информация в самом ListView не хранится (VirtualListView), поэтому наверное у стандартного ListView такой возможности нет.



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

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
3-24354
Александр365
2003-08-15 22:58
2003.09.08
Сообщение об ошибке


1-24428
Agent_03
2003-08-26 00:35
2003.09.08
Печать Landscape


1-24480
Zheks
2003-08-27 17:31
2003.09.08
Canvas


3-24314
muzzzy
2003-08-05 14:29
2003.09.08
oracle руские буковки непоказывает


1-24542
GreySerg
2003-08-26 17:28
2003.09.08
Возврат в несортированный список в TListBox