ImageList_AddIcon

cs_Tyrex Messages postés 5 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 11 juin 2003 - 8 mai 2003 à 21:27
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 9 mai 2003 à 17:20
Est ce que quelqu'un sait comment déclarer la fonction ImageList_AddIcon (de comctl32.dll) et de l'utiliser avec une ImageList dans Visual Basic 6.0 ?

5 réponses

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
9 mai 2003 à 03:15
TU devrais pas plutot utiliser l'OCX ?

Max12 :) , www.psycomaxter.fr.st <= Totalement refait !!!!! ;) :-p
[Admin of CS]

Aucun clavier n'a été mal traité pendant la composition de ce message ;)
0
cs_Tyrex Messages postés 5 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 11 juin 2003
9 mai 2003 à 05:33
Merci de ta réponse max12, mais quelle OCX ?

En fait mon problème est de coder le chargement des icones de fichier dans une ListView. (Pb maintes fois résolu par d'autres). Le pb. est de trouver un code ultra rapide, car quand il faut afficher une liste de 1000 fichiers, ça rame...
Il existe 2 techniques pour récupérer les icones de fichiers :

Par le registre :

SHGetFileInfo ByVal Fichier, 0&, ShInfo, Len(ShInfo), _
SHGFI_ICON Or SHGFI_SMALLICON Or Attribut _
ImageList_Draw hIcon, ShInfo.iIcon, Picture1.hdc, 0, 0, _
&H808000
DestroyIcon FileInfo.hIcon
Set imgx = ImageList1.ListImages.Add(, , Picture1.Image)

En cherchant l'icone directement dans le fichier :

ExtractIconEx Fichier, Num_Icone, 0&, hIcon, 1
DrawIconEx Picture1.hdc, 0, 0, hIcon, 0, 0, 0, 0, &H3
DestroyIcon hIcon
Set imgx = ImageList1.ListImages.Add(, , Picture1.Image)

Mais je trouve ces 2 codes trop lents. Je me suis donc concentré sur un code qui chargerait directement l'icone dans une ImageList sans passer par une Picture (notamment avec ImageList_AddIcon). Mais cette fonction plante dans mon code. Je me suis également posé la question s'il n'éxistait pas une ImageList système qui contiendrait toutes les icones de fichier. Si ç'est le cas, je bénierait la personne qui m'apportera la réponse.
0
cs_BFR Messages postés 88 Date d'inscription mardi 30 juillet 2002 Statut Membre Dernière intervention 1 mars 2008
9 mai 2003 à 12:37
cela va te permettre directement d'extraire une icone d'un lecteur,dossier ou autre et les afficher dans un treeview,listview etc
bonne continuation
A++

-API utilisée pour dessiner dans un pictureBox une icône grâce à son Handle ( extrait avec l'API SHGetFileInfo )
Private Declare Function ImageList_Draw Lib "comctl32.dll" _
(ByVal himl&, _
ByVal i&, _
ByVal hDCDest&, _
ByVal X&, _
ByVal Y&, _
ByVal flags&) _
As Long

'-Couleur de la transparence ( je me comprends, essayez de changer pour comprendre )
Private Const ILD_TRANSPARENT = &H1

' API utilisée pour extraire l'icône associé à un fichier
' Renvoie un nombre ( long ) qui représente le handle d'un icône ( qui varie à chaque sollicitation )
Private 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

Private Const SHGFI_DISPLAYNAME = &H200
Private Const SHGFI_EXETYPE = &H2000
Private Const SHGFI_SYSICONINDEX = &H4000
Private Const SHGFI_LARGEICON = &H0
Private Const SHGFI_SMALLICON = &H1
Private Const SHGFI_SHELLICONSIZE = &H4
Private Const SHGFI_TYPENAME = &H400

Private Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME _
Or SHGFI_SHELLICONSIZE _
Or SHGFI_SYSICONINDEX _
Or SHGFI_DISPLAYNAME _
Or SHGFI_EXETYPE

Private Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * 255
szTypeName As String * 80
End Type


Private Sub Form_Load()
'-Déclaration
Dim hIcon As Long
Dim ShInfo As SHFILEINFO


'-Ajouter un imageList (imgPrinc)
'-Mettre les propriéte de l'imageList (imgPrinc) sur:
'.MackColor = &H00FF00FF&
'et UseMaskColor sur true


'-Ajouter une PictureBox (picIcon)
'-Mettre la PictureBox (picIcon)
'.BackColor = &H00FF00FF&

'-Extraire l'icône associé à un fichier ou autre EX:lecteur etc...
hIcon = SHGetFileInfo("C:\windows", 0&, ShInfo, Len(ShInfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)

'-Effacer PictureBox
picIcon.Picture = Nothing

'-Dessiner dans un pictureBox une icône grâce à son Handle
ImageList_Draw hIcon, ShInfo.iIcon, picIcon.hDC, 0, 0, ILD_TRANSPARENT

'-Ajouter a un ImageList
imgPrinc.ListImages.Add , "C:\windows", picIcon.Image


'-Après il suffit de faire la liaison entre ton controle et l'imageList





End Sub
0
cs_Tyrex Messages postés 5 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 11 juin 2003
9 mai 2003 à 17:18
Merci BFR.
En fait ce code je le connaisais déja (voir ma réponse précédente), je cherche un code plus rapide.

Une autre question que je me pose :
existe-t-il une ImageList système déja toute faite qui contiendrait les icones utilisées dans Shell.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
9 mai 2003 à 17:20
Dsl mais je connais pas d'autre façons ...

Max12 :) , www.psycomaxter.fr.st <= Totalement refait !!!!! ;) :-p
[Admin de Codes-Sources (Modérateur si vous voulez ;) )]
Aucun clavier n'a été mal traité pendant la composition de ce message ;)
0
Rejoignez-nous