Newsgroup: it.comp.lang.visual-basic
Titolo: Miracoli sulle icone

Premesso che è molto che non leggo le news e che quindi non so se
l'argomento è stato già trattato, passo alla spiegazione del problema.
Tramite varie ricerche sul registry trovo l'icona associata a un documento.
Facendo le adeguate elaborazioni per ricavare l'indice (ammesso che ci sia)
dell'icona, passo a disegnare la suddetta icona.
E qui arriva l'intoppo, se l'icona non è in una collezione quindi un .ico
semplice, nessun problema, ma se non è così sono dolori, infatti non riesco
a caricare l'icona con un formato diverso da 32X32, ho provato con
drowiconex, ma il risultato è un'icona 32X32 forzata a 16X16, ho provato a
cercare altre api ma non ne ho trovata nessuna che abbia la documentazione
adeguata per capire se è quella giusta o meno.
Qualcuno sa come posso fare?
Ringrazio anticipatamente il salvatore.

Hai provato con ExtractIconEx...il parametro phiconLarge, phiconSmall č
sospetto, dice (da MSDN)
[out] Pointer to an array of icon handles that receives handles to the large
icons extracted from the file. If this parameter is NULL, no large icons are
extracted from the file.
l'altro č quasi uguale...
Anche se č un pochino strano qui parla di large icon e non large icon, io
sapevo anche che esistevano piů tipi di "middle icon" della serie
(16x16,32x32,48x48(forse)ecc...)ů
Ti rimando anche alla lettura dell'articolo Q142815, forse puň esserti
utile....
-----------
ciao
Sabba

Grazie ma purtroppo non và...
Prova questo
Attribute VB_Name = "ModGetSmallIcon"
Option Explicit
Public Const SHGFI_DISPLAYNAME As Long = &H200
Public Const SHGFI_EXETYPE As Long = &H2000
Public Const SHGFI_SYSICONINDEX As Long = &H4000
Public Const SHGFI_LARGEICON As Long = &H0
Public Const SHGFI_SMALLICON As Long = &H1
Public Const ILD_TRANSPARENT As Long = &H1
Public Const SHGFI_SHELLICONSIZE As Long = &H4
Public Const SHGFI_TYPENAME As Long = &H400
Public Const BASIC_SHGFI_FLAGS As Long = SHGFI_TYPENAME Or
SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX Or SHGFI_DISPLAYNAME Or
SHGFI_EXETYPE
Public Type SHFILEINFO
  hIcon As Long
  iIcon As Long
  dwAttributes As Long
  szDisplayName As String * 260
  szTypeName As String * 80
End Type
Public Declare Function SHGetFileInfo Lib "Shell32.dll" Alias
"SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As
Long, psfi As SHFILEINFO, ByVal cbSizeFileInfo As Long, ByVal uFlags
As Long) As Long
Public Declare Function ImageList_Draw Lib "Comctl32.dll" (ByVal himl
As Long, ByVal i As Long, ByVal hDCDest As Long, ByVal X As Long,
ByVal Y As Long, ByVal flags As Long) As Long
Public Sub GetSmallIcon(File As String, dimOfIcon As Integer, Oggetto
As Object)
  Dim FileInfo As SHFILEINFO
  'Dim hImgSmall As Long, hImgLarge As Long, Esegui As Long
  Dim hImgSmall, Esegui As Long
  'Se il file non esiste, esce dalla routine.
  If Dir(File, 6) = "" Then Exit Sub
  'Se "Oggetto" non è un controllo di tipo PictureBox, esce dalla
routine.
  'if Not TypeOf Oggetto Is PictureBox Then Exit Sub
  Oggetto.Picture = LoadPicture()
  'non mi serve If dimOfIcon <> 16 And dimOfIcon <> 32 Then dimOfIcon
= 32
  'Restituisce le icone associate ad file.
  hImgSmall = SHGetFileInfo(File, 0, FileInfo, Len(FileInfo),
BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)
  'non mi serve hImgLarge = SHGetFileInfo(File, 0, FileInfo,
Len(FileInfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON)
  'Visualizza l'icona.
  'Importante: per disegnare un'icona prima di visualizzare il form
che la contiene, la proprietà AutoRedraw dell'oggetto Picture deve
essere impostata su True.
  'If dimOfIcon = 16 Then Esegui = ImageList_Draw(hImgSmall,
FileInfo.iIcon, Oggetto.hdc, 0, 0, ILD_TRANSPARENT) Else Esegui =
ImageList_Draw(hImgLarge, FileInfo.iIcon, Oggetto.hdc, 0, 0,
ILD_TRANSPARENT)
  Esegui = ImageList_Draw(hImgSmall, FileInfo.iIcon, Oggetto.hdc, 0,
0, ILD_TRANSPARENT)
End Sub