Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файлы в ListView со значками. Нужен пример! 
:(
    Опции темы
srtroy
Дата 14.7.2002, 17:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет!

Ребята! Нуждаюсь в примере загрузки файлов в ListView (если у Вас есть пример загрузки в другой компонент - давайте) и отображение их с ассоциированными значками.
  Вверх
Song
Дата 14.7.2002, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Код

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, comctrls,
 StdCtrls;

type
 TForm1 = class(TForm)
   ListView1: TListView;
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   procedure SaveListViewToFile(AListView: TListView; sFileName: string);
   procedure LoadListViewToFile(AListView: TListView; sFileName: string);
 public
 end;

const
 Msg1 = 'File "%s" does not exist!';
 Msg2 = '"%s" is not a ListView file!';

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.SaveListViewToFile(AListView: TListView; sFileName: string);
var
 idxItem, idxSub, IdxImage: Integer;
 F: TFileStream;
 pText: PChar;
 sText: string;
 W, ItemCount, SubCount: Word;
 MySignature: array [0..2] of Char;
begin
 //Initialization
 with AListView do
 begin
   ItemCount := 0;
   SubCount  := 0;
   //****
   MySignature := 'LVF';
   //  ListViewFile
   F := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);
   F.Write(MySignature, SizeOf(MySignature));

   if Items.Count = 0 then
     // List is empty
     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
         //Save subitems count
         if SubItems.Count = 0 then
           SubCount := 0
         else
           SubCount := Subitems.Count;
         F.Write(SubCount, SizeOf(SubCount));
         //Save ImageIndex
         IdxImage := ImageIndex;
         F.Write(IdxImage, SizeOf(IdxImage));
         //Save Caption
         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
             //Save Item's subitems
             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 TForm1.LoadListViewToFile(AListView: TListView; sFileName: 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 AListView do
 begin
   ItemCount := 0;
   SubCount  := 0;

   sExeName := ExtractFileName(sFileName);

   if not FileExists(sFileName) then
   begin
     MessageBox(Handle, PChar(Format(Msg1, [sExeName])), 'I/O Error', MB_ICONERROR);
     Exit;
   end;

   F := TFileStream.Create(sFileName, fmOpenRead);
   F.Read(MySignature, SizeOf(MySignature));

   if MySignature <> 'LVF' then
   begin
     MessageBox(Handle, PChar(Format(Msg2, [sExeName])), 'I/O Error', MB_ICONERROR);
     Exit;
   end;

   F.Read(ItemCount, SizeOf(ItemCount));
   Items.Clear;

   for idxItem := 1 to ItemCount do
   begin
     with Items.Add do
     begin
       //Read imageindex
       F.Read(SubCount, SizeOf(SubCount));
       //Read imageindex
       F.Read(IdxImage, SizeOf(IdxImage));
       ImageIndex := IdxImage;
       //Read the Caption
       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;

// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
 // Save Items and Clear the ListView
 SaveListViewToFile(ListView1, 'MyListView.sav');
 ListView1.Items.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 // Load Items
 LoadListViewToFile(ListView1, 'MyListView.sav');
end;



--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.