Как получить в ListView иконку файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AnGI_Burn
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 24.09.2007 (Пн) 13:50

Как получить в ListView иконку файла

Сообщение AnGI_Burn » 04.03.2008 (Вт) 11:20

Как можно получить в ListView иконку файла? Причем не только exe и dll, а любого файла? :?:

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 04.03.2008 (Вт) 11:26

AnGI_Burn
То есть ты уже получил для exe и dll? Дай на код позырить?

...и да, загрузить иконку для файла, не содержащего иконку, загрузить иконку легко: просто отыскиваешь в реестре, зарегистрирован ли этот файл. там прописано, какое приложение и какая иконка с ним связаны. и просто загружаешь иконку по указанному пути. используя код для загрузки иконки из файла с иконкой (как exe и dll)

... ах да, и еще: если в реестре не зарегистрирован искомый тип, или для него не прописана иконка, тогда грузишь дефолтную, либо свою, либо из shell32,0

... ну и наконец поиск по слову ExtractIcon дает более чем исчерпывающие результаты
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

AnGI_Burn
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 24.09.2007 (Пн) 13:50

Сообщение AnGI_Burn » 04.03.2008 (Вт) 16:56

Денис писал(а):Дай на код позырить?

Чё там зырить то? Поиск по слову ExtractIcon дает такие же исчерпывающие результаты как и этот пример.
Вложения
FileIcon.zip
(2.04 Кб) Скачиваний: 71

AnGI_Burn
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 24.09.2007 (Пн) 13:50

Сообщение AnGI_Burn » 04.03.2008 (Вт) 21:19


Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 04.03.2008 (Вт) 22:22

Я помнится когда-то делал так: с помощью SHGetFileInfo вытаскивал иконку, потом рисовал её на PictureBox'e с помощью ImageList_Draw с флагом ILD_TRANSPARENT, а потом уже добавлял в ассоциированный с ListView ImageList картинку с этого пикчурбокса. То есть что-то типа такого:
Код: Выделить всё
Private Sub AddIcon2List(lpstrFile As String, lngIndex As Long)
Dim hImage As Long, udtFI As SHFILEINFO
hImage = SHGetFileInfo(lpstrFile, ByVal 0&, udtFI, Len(udtFI), SHGFI_SYSICONINDEX Or SHGFI_SMALLICON)
Picture1.Cls
ImageList_Draw hImage, udtFI.iIcon, Picture1.hdc, 0, 0, ILD_TRANSPARENT
ImageList2.ListImages.Add , , Picture1.Image
ListView1.SmallIcons = ImageList1
ListView1.ListItems.Add , , lpstrFile, , lngIndex
End Sub

Может кто-то скажет, что криво, на зато работает. Проект, где данный код используется, писался года 2 назад и у меня нет желания переписывать его...
Подпись проходит рефакторинг


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 114

    TopList  
cron