Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2010, 20:12   #1
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию работа с listview

Привет всем. как при получении строки вида D:\111.exe в listview отображать соответст в Windows иконкой? (если файла не существует по этому пути) подскажите пожалуйста
D_E_N вне форума Ответить с цитированием
Старый 05.01.2010, 20:57   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что зададите в TImageList-ах, то и будет отображаться.
Событие OnGetImageIndex.
mihali4 вне форума Ответить с цитированием
Старый 05.01.2010, 21:23   #3
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

а иначе не как?
D_E_N вне форума Ответить с цитированием
Старый 05.01.2010, 21:37   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Пример Михаила Флёнова из книги Библия Delphi 11 глава
Код:
procedure TForm1.FormActivate(Sender: TObject);
var
  SysImageList: UINT;
  SFI: TSHFileInfo;
begin
  // Create lists big and small icons
  ListView1.LargeImages := TImageList.Create(Self);
  ListView1.SmallImages := TImageList.Create(Self);

  // Query big icons
  SysImageList := SHGetFileInfo(nil, 0, SFI, SizeOf(TSHFileInfo),
    SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
  if SysImageList <> 0 then
  begin
    // Get big icons
    ListView1.LargeImages.Handle := SysImageList;
    ListView1.LargeImages.ShareImages := true;
  end;

  // Query small icons
  SysImageList := SHGetFileInfo(nil, 0, SFI, SizeOf(TSHFileInfo),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  if SysImageList <> 0 then
  begin
    ListView1.SmallImages.Handle := SysImageList;
    ListView1.SmallImages.ShareImages := true;
  end;
end;
При добавлении
Код:
with ListView1.Items.Add do
          begin
            Caption := SearchRec.Name;
            // get icon
            ImageIndex := ShInfo.iIcon;
            // get size
            SubItems.Add(FloatToStr(((SearchRec.Size / 1024) / 1024)));
            SubItems.Add(ShInfo.szTypeName);
            SubItems.Add(FileTimeToDateTimeStr(ftLastWriteTime));
            SubItems.Add(Attributes);
            SubItems.Add(Edit1.Text + cFileName);
            if (FILE_ATTRIBUTE_DIRECTORY and dwFileAttributes) > 0 then
              SubItems.Add('dir')
            else
              SubItems.Add('file');
          end;
psycho-coder вне форума Ответить с цитированием
Старый 05.01.2010, 21:52   #5
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

отображает но иконка вообще не та.
D_E_N вне форума Ответить с цитированием
Старый 05.01.2010, 23:33   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

В примере идет загрузка глобальных значений значков, для конкретного файла нужно в первый параметр поставить реальные значения файла.
Код:
 SysImageList := SHGetFileInfo(<путь к файлу>, 0, SFI, SizeOf(TSHFileInfo),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
psycho-coder вне форума Ответить с цитированием
Старый 06.01.2010, 01:13   #7
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

а если файла не существует? можно ли как то использовать библиотеку shell32.dll?
D_E_N вне форума Ответить с цитированием
Старый 06.01.2010, 01:23   #8
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот тут смотри - тык
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 06.01.2010, 01:26   #9
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

SPAMER спасибо но я там был.
D_E_N вне форума Ответить с цитированием
Старый 06.01.2010, 01:40   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от D_E_N Посмотреть сообщение
а если файла не существует? можно ли как то использовать библиотеку shell32.dll?
Цитата:
Сообщение от D_E_N
SPAMER спасибо но я там был.
Оо. Вам привели ссылку как использовать shell32.dll. И что же там не так?
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
Работа с ListView мимо Общие вопросы Delphi 7 12.02.2011 17:05
Listview Neymexa Общие вопросы .NET 0 13.05.2009 21:19
ListView Cpluser Общие вопросы .NET 4 13.04.2009 22:45
ListView aesoem Общие вопросы Delphi 4 05.07.2008 15:55