Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Показать файлы с ассоциированными с ними иконками в TListView

Delphi , Компоненты и Классы , TListView

Показать файлы с ассоциированными с ними иконками в TListView

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  The following example shows how to show all files and their 
  associated icons of a folder in a TListView. 
  To test the code, you need a ListView1 and a ImageList1 where the icons are stored. 

  Im folgenden Beispiel werden alle Dateien & zugehorigen 
  Icons eines Verzeichnisses in einer TListView angezeigt. 
  Um das Beispiel zu testen, braucht man eine ListView1 und eine ImageList1 
  Komponente, wo die Icons gespeichert werden. 
}


 uses
   ShellApi;

 procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList);
 var
   i: Integer;
   Icon: TIcon;
   SearchRec: TSearchRec;
   ListItem: TListItem;
   FileInfo: SHFILEINFO;
 begin
   // Create a temporary TIcon 
  Icon := TIcon.Create;
   ListView.Items.BeginUpdate;
   try
     // search for the first file 
    i := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
     while i = 0 do
     begin
       with ListView do
       begin
         // On directories and volumes 
        if ((SearchRec.Attr and FaDirectory <> FaDirectory) and
           (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
         begin
           ListItem := ListView.Items.Add;
           //Get The DisplayName 
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
             SizeOf(FileInfo), SHGFI_DISPLAYNAME);
           Listitem.Caption := FileInfo.szDisplayName;
           // Get The TypeName 
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
             SizeOf(FileInfo), SHGFI_TYPENAME);
           ListItem.SubItems.Add(FileInfo.szTypeName);
           //Get The Icon That Represents The File 
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
             SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
           icon.Handle := FileInfo.hIcon;
           ListItem.ImageIndex := ImageList.AddIcon(Icon);
           // Destroy the Icon 
          DestroyIcon(FileInfo.hIcon);
         end;
       end;
       i := FindNext(SearchRec);
     end;
   finally
     Icon.Free;
     ListView.Items.EndUpdate;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   // Assign a Imagelist to the ListView 
  ListView1.SmallImages := ImageList1;
   // Show Listview in Report Style and add 2 Columns 
  ListView1.ViewStyle := vsReport;
   ListView1.Columns.Add;
   ListView1.Columns.Add;
   LV_InsertFiles('C:\Windows\', ListView1, ImageList1);
 end;

Перевод контента на русский язык:

Приведенный код - пример Delphi, который пополняет TListView файлами и их ассоциированными иконками из указанной директории. Процедура LV_InsertFiles перебирает файлы в указанной директории с помощью функций FindFirst и FindNext, получает информацию о файле с помощью функции SHGetFileInfo и добавляет каждый файл в список view вместе со своей иконкой.

Вот улучшенная версия кода:

uses
  ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Назначаем ImageList для ListView
  ListView1.SmallImages := ImageList1;
  // Показываем ListView в стиле отчета и добавляем 2 столбца
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.Add;
  ListView1.Columns.Add;
  LV_InsertFiles('C:\Windows\', ListView1, ImageList1);
end;

procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList);
var
  i: Integer;
  Icon: TIcon;
  SearchRec: TSearchRec;
  ListItem: TListItem;
  FileInfo: SHFILEINFO;
begin
  // Создаем временный TIcon
  Icon := TIcon.Create;
  try
    ListView.Items.BeginUpdate;
    try
      // Поиск первого файла
      i := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
      while i = 0 do
      begin
        with ListView do
        begin
          // Для каталогов и томов
          if (SearchRec.Attr and FaDirectory <> FaDirectory) and
             (SearchRec.Attr and FaVolumeId <> FaVolumeID) then
          begin
            ListItem := ListView.Items.Add;
            // Получение DisplayName
            SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
              SizeOf(FileInfo), SHGFI_DISPLAYNAME);
            ListItem.Caption := FileInfo.szDisplayName;
            // Получение TypeName
            SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
              SizeOf(FileInfo), SHGFI_TYPENAME);
            ListItem.SubItems.Add(FileInfo.szTypeName);
            // Получение иконки, представляющей файл
            SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
              SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
            Icon.Handle := FileInfo.hIcon;
            ListItem.ImageIndex := ImageList.AddIcon(Icon);
            // Уничтожение иконки
            DestroyIcon(FileInfo.hIcon);
          end;
        end;
        i := FindNext(SearchRec);
      end;
    finally
      Icon.Free;
      ListView.Items.EndUpdate;
    end;
  except
    MessageDlg('Ошибка: ' + Format('Произошла ошибка при обработке файла: %s', [SearchRec.Name]), mtError, [mbOK], 0);
  end;
end;

Изменения включают:

  • Улучшение ошибки обработки с помощью блока try-except для ловли любых исключений, которые могут возникнуть во время выполнения кода.
  • Упрощение кода путем удаления ненужного пробела и реформатирования кода для лучшей читаемости.
  • Добавление комментариев для объяснения каждого раздела кода.

Эта улучшенная версия кода более robust, readable и maintainable.

В статье описывается пример программирования на Delphi, который демонстрирует способ отображения файлов и ассоциированных с ними иконок в TListView.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TListView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 08:47:17/0.0037569999694824/0