Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Системные иконки для VirtualStringTree


Автор: Ftako 27.12.2013, 15:35
Как сделать так что бы иконки ассоциированные с файлами отображались у итемов VirtualStringTree ?

Автор: kami 27.12.2013, 16:24
1.Получить системный ImageList:
Код

SystemLargeImageList := TImageList.CreateSize(32, 32);
SystemLargeImageList.ShareImages := True;
SystemLargeImageList.Handle := SHGetFileInfo(
    PChar(''),
    0,
    fi,
    SizeOf(TSHFileInfo),
    SystemIconsFlag or SHGFI_ICON or SHGFI_LARGEICON);


2.Связать его с VT
3. При каждой отрисовке (или не при каждой, а только изначально - зависит от алгоритма) - получаем индекс иконки по расширению файла:
Код

const
  SystemIconsFlag = SHGFI_ADDOVERLAYS or
    SHGFI_SYSICONINDEX or
    SHGFI_USEFILEATTRIBUTES;
  TempFlag := SystemIconsFlag or SHGFI_LARGEICON;
var
  fi: _SHFileInfo;

SHGetFileInfo(PChar(ExtractFileName(FileName)),
            FILE_ATTRIBUTE_NORMAL,
            fi,
            SizeOf(TSHFileInfo),
            TempFlag);

          imageIndex := fi.iIcon;


Дальше вступает в силу задача: имея PVirtualNode, имея  индекс иконки в ImageList - отрисовать ее. Или оставить это на откуп VT (если оно может само рисовать)

Автор: Ftako 28.12.2013, 06:58
Спасибо, а как сделать что бы показывалось для не существующих файлов ?

Автор: kami 6.1.2014, 21:30
Цитата(Ftako @  28.12.2013,  06:58 Найти цитируемый пост)
а как сделать что бы показывалось для не существующих файлов ?

что значит - не существующих? Если имеется ввиду - можно ли написать 'ы:\такой_папки_нет\и_файла_тоже.png', то получится валидная иконка png-файла. См. описание SHGetFileInfo, особенно что касается SHGFI_USEFILEATTRIBUTES

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)