Форум: "Основная";
Текущий архив: 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