powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как отобразить иконку файла по его расширению?
11 сообщений из 11, страница 1 из 1
Как отобразить иконку файла по его расширению?
    #36488276
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тока есть такой способ:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim mIcon As Long
mIcon = ExtractAssociatedIcon(App.hInstance, xFileName,  2 )
DrawIcon Image2.hDC,  0 ,  0 , mIcon
DestroyIcon mIcon

'ну и определения:
Public Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociatedIconA" _
  (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long

Public Declare Function DrawIcon Lib "user32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, _
  ByVal hIcon As Long) As Long

Public Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Но для него файл должен существовать. Все примеры, которые я смог найти, тоже предполагают это. А как бы отобразить иконку, просто зная расширение файла?
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488409
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

пока на ум пришло создать где нить файл, например в CurDir-e со случайным неймом и нужным расшириением и вытащить icon из него, а потом убить. Но это некошер.
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488493
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SHGetFileInfo

Jah loves you.
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488505
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, для этой функции тоже нужен файл.
Остается только ковыряться в реестре.

Jah loves you.
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488510
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShamanusShocker.Pro,

пока на ум пришло создать где нить файл, например в CurDir-e со случайным неймом и нужным расшириением и вытащить icon из него, а потом убить. Но это некошер.Если такую операцию нужно делать изредка, то я бы так и сделал, чтобы не городить кошерный огород.
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488513
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySHGetFileInfo

Эх, сложно у меня с API.

Возвращает информацию об объекте файловой системы , как например файл, папка корень логичекого диска.
....
Параметры
pszPath: Строка которая содежит путь к файлу или папки.

То есть тут вроде как речь идет тоже о существующем файле...
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЕсли такую операцию нужно делать изредка, то я бы так и сделал, чтобы не городить кошерный огород.

Хочется сделать красиво
Я думал это просто.

Сейчас у меня вообще достается файл из базы, кладется в файловую систему и потом оттуда берется иконка или вместо иконки отображается уменьшенная копия картинки.

Как обойтись без файловой системы с случае картинкой я понял, теперь хотел еще и обойтись в случае иконки.
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488705
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭх, сложно у меня с API.
с таким то количеством сообщений?
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36488714
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtimс таким то количеством сообщений?

да.
Отвечая на простые вопросы, задаю более сложные.

Софт, который я веду на VB - по большому счету интерфейс к функциям БД, API там редко нужен, основная логика в TSQL
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36501974
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Antonariy
> Хотя нет, для этой функции тоже нужен файл.

Не совсем, в МСДН написанно так:
MSDN HOWTO: Retrieve an Icon for a File Class Without a File

Q179167


--------------------------------------------------------------------------------
The information in this article applies to:

a.. Microsoft Win32 Application Programming Interface (API)

--------------------------------------------------------------------------------


SUMMARY
This article explains how to use the SHGetFileInfo API to retrieve the icon for a file class without having a specific
file of that class available.



MORE INFORMATION
To do this, select the SHGFI_USEFILEATTRIBUTES flag and FILE_ATTRIBUTE_NORMAL so that the API assumes that the file
exists and it will not try to look for it on disk.

For example, to find the icon associated with ".zip" files the call would look like:


SHFILEINFO sfi;
HIMAGELIST hil;

ZeroMemory(&sfi,sizeof(sfi));
hil = SHGetFileInfo(".zip",
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_USEFILEATTRIBUTES|SHGFI_ICON);

// hil now contains the handle to the system image list
// containing the large icon images.
// sfi.hIcon contains the large icon for the file.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как отобразить иконку файла по его расширению?
    #36502847
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все украли до нас
Некий AKillGodKillBuddha привел пример:
На форму бросить кнопку и объект Image, имена объектов оставить по умолчанию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
Option Explicit
  Private Const MAX_PATH =  260 
  Private Type SHFILEINFO
          hIcon   As Long
          iIcon   As Long
          dwAttributes   As Long
          szDisplayName   As String * MAX_PATH
          szTypeName   As String *  80 
  End Type
  Private Const FILE_ATTRIBUTE_NORMAL = &H80
  Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _
          (ByVal pszPath As String, ByVal dwAttributes As Long, psfi As SHFILEINFO, ByVal cbSizeFileInfo As Long, ByVal 
uFlags As Long) As Long
  Private Enum EShellGetFileInfoConstants
                  SHGFI_ICON = &H100                                     '   //   get   icon
                  SHGFI_DISPLAYNAME = &H200                             '   //   get   display   name
                  SHGFI_TYPENAME = &H400                             '   //   get   type   name
                  SHGFI_ATTRIBUTES = &H800                             '   //   get   attributes
                  SHGFI_ICONLOCATION = &H1000                     '   //   get   icon   location
                  SHGFI_EXETYPE = &H2000                             '   //   return   exe   type
                  SHGFI_SYSICONINDEX = &H4000                     '   //   get   system   icon   index
                  SHGFI_LINKOVERLAY = &H8000                     '   //   put   a   link   overlay   on   icon
                  SHGFI_SELECTED = &H10000                             '   //   show   icon   in   selected   state
                  SHGFI_ATTR_SPECIFIED = &H20000             '   //   get   only   specified   attributes
                  SHGFI_LARGEICON = &H0                                     '   //   get   large   icon
                  SHGFI_SMALLICON = &H1                                     '   //   get   small   icon
                  SHGFI_OPENICON = &H2                                     '   //   get   open   icon
                  SHGFI_SHELLICONSIZE = &H4                             '   //   get   shell   size   icon
                  SHGFI_PIDL = &H8                                             '   //   pszPath   is   a   pidl
                  SHGFI_USEFILEATTRIBUTES = &H10             '   //   use   passed   dwFileAttribute
  End Enum
  Private Type PictDesc
          cbSizeofStruct   As Long
          picType   As Long
          hImage   As Long
          xExt   As Long
          yExt   As Long
  End Type
  Private Type Guid
          Data1   As Long
          Data2   As Integer
          Data3   As Integer
          Data4( 0  To  7 )       As Byte
  End Type
  Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (lpPictDesc As PictDesc, riid As Guid, ByVal 
fPictureOwnsHandle As Long, ipic As IPicture) As Long
  Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

  '   =================================================================================
  '   Interface
  '   =================================================================================
  Private Enum EGetIconTypeConstants
          egitSmallIcon =  1 
          egitLargeIcon =  2 
  End Enum

  Private Function GetIcon( _
                  ByVal sfile As String, _
                  Optional ByVal EIconType As EGetIconTypeConstants = egitLargeIcon _
          ) As Object
  Dim lR     As Long
  Dim hIcon     As Long
  Dim tSHI     As SHFILEINFO
  Dim lFlags     As Long

          '   Prepare   flags   for   SHGetFileInfo   to   get   the   icon:
          If (EIconType = egitLargeIcon) Then
                  lFlags = SHGFI_USEFILEATTRIBUTES Or SHGFI_ICON Or SHGFI_LARGEICON
          Else
                  lFlags = SHGFI_USEFILEATTRIBUTES Or SHGFI_ICON Or SHGFI_SMALLICON
          End If
          lFlags = lFlags And Not SHGFI_LINKOVERLAY
          lFlags = lFlags And Not SHGFI_OPENICON
          lFlags = lFlags And Not SHGFI_SELECTED
          '   Call   to   get   icon:
          lR = SHGetFileInfo(sfile, FILE_ATTRIBUTE_NORMAL, tSHI, Len(tSHI), lFlags)               '????,??????
          If (lR <>  0 ) Then
                  '   If   we   succeeded,   the   hIcon   member   will   be   filled   in:
                  hIcon = tSHI.hIcon
                  '   If   we   have   an   icon,   convert   it   to   a   VB   picture   and   return   it:
                  If (hIcon <>  0 ) Then
                          Set GetIcon = IconToPicture(hIcon)
                  End If
                  '   Free   resouce:
                  DeleteObject hIcon
          End If

  End Function
  Private Function IconToPicture(ByVal hIcon As Long) As IPicture
          If hIcon =  0  Then Exit Function
          '   This   is   all   magic   if   you   ask   me:
          Dim NewPic     As Picture, PicConv       As PictDesc, IGuid       As Guid
          PicConv.cbSizeofStruct = Len(PicConv)
          PicConv.picType = vbPicTypeIcon
          PicConv.hImage = hIcon
          With IGuid
                  .Data1 = &H7BF80980
                  .Data2 = &HBF32
                  .Data3 = &H101A
                  .Data4( 0 ) = &H8B
                  .Data4( 1 ) = &HBB
                  .Data4( 2 ) = &H0
                  .Data4( 3 ) = &HAA
                  .Data4( 4 ) = &H0
                  .Data4( 5 ) = &H30
                  .Data4( 6 ) = &HC
                  .Data4( 7 ) = &HAB
          End With
          OleCreatePictureIndirect PicConv, IGuid, True, NewPic
          Set IconToPicture = NewPic
  End Function
  Private Function GetFileTypeName( _
                  ByVal sfile As String _
          ) As String
          Dim lR     As Long
          Dim tSHI     As SHFILEINFO
          Dim iPos     As Long
          lR = SHGetFileInfo(sfile, FILE_ATTRIBUTE_NORMAL, tSHI, Len(tSHI), SHGFI_USEFILEATTRIBUTES Or SHGFI_TYPENAME) 
'????
          If (lR <>  0 ) Then
                  iPos = InStr(tSHI.szTypeName, Chr$( 0 ))
                  If (iPos =  0 ) Then
                          GetFileTypeName = tSHI.szTypeName
                  ElseIf (iPos >  1 ) Then
                          GetFileTypeName = Left$(tSHI.szTypeName, (iPos -  1 ))
                  Else
                          GetFileTypeName = ""
                  End If
          End If
  End Function

  Private Sub Command1_Click()
          Dim s     As String
          s = ".rar"
          Dim pic     As StdPicture
          Set pic = GetIcon(s)
          MsgBox GetFileTypeName(s)
          Image1.Picture = pic
  End Sub


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как отобразить иконку файла по его расширению?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]