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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
3-24303
Fants
2003-08-18 11:19
2003.09.08
TUPDateSQL


1-24470
Ghost
2003-08-27 08:15
2003.09.08
Не получаеться отловить сообщение о выключении windows


1-24524
SEN
2003-08-26 23:20
2003.09.08
TMemo


1-24449
INTAARI
2003-08-25 16:09
2003.09.08
Ошибка при работе с таймером EOutofResources.


9-24292
Карлсон
2002-12-15 14:53
2003.09.08
GLScene





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