Astuce imagelist comctl32.ocx

Soyez le premier à donner votre avis sur cette source.

Vue 17 335 fois - Téléchargée 1 595 fois

Description

J'utilise dans certains de mes programmes le composant COMCTL32.OCX ( Microsoft Windows Common Controls 5.0 (SP2) ), car les controles fournis avec adoptent les style XP (si l'appli tourne avec un fichier manifest, etc...). Cepandant il y a un problème avec le controle ImageList fournit dans ce composant, en stockant des icones dedans, les icones sont " corrompues " (voir capture) dés la 2ème execution...
La seule solution etait de vider l'ImageList et de recharger les icones avant chaque nouvelle compilation >> super chiant !!
le probleme n'existe pas avec le control ImageList du composant MSCOMCTL.OCX ( Microsoft Windows Common Controls 6.0 (SP6) ) , mais les controles de COMCTL32.OCX ne peuvent pas etre associés avec le controle ImageList de MSCOMCTL.OCX (Sinon c'est pas drole :P)
En fait la solution est de mettre ses icones dans un controle ImageList de MSCOMCTL.OCX et de charger les icones dans le controle ImageList de COMCTL32.OCX depuis le code dans l'evenement load de la feuille ;)

C'est pas trés clair mais je sais pas comment expliqué ca... La capture vous aiderat à comprendre...

J'ai cherché longtemps à résoudre ce probleme en vain et je n'ai rien trouvé sur forum ou dans les sources... Si une source similaire a deja été déposé ici , désolé !!

Source / Exemple :


Dim i As Integer

' On remplit le controle ImageList de COMCTL32.OCX
' avec le controle ImagList de MSCOMCTL.OCX
For i = 1 To ImageListMSCOMCTL.ListImages.Count
   ImageListCOMCTL32(1).ListImages.Add , , ImageListMSCOMCTL.ListImages(i).Picture
Next

For i = 0 To 1 ' Boucle pour ajouter les boutons dans les 2 toolbars
   ToolbarCOMCTL32(i).ImageList = ImageListCOMCTL32(i) ' Initialisations de la toolbar avec le control ImageList correspondant
   With ToolbarCOMCTL32(i).Buttons
      .Add , , "Rafraichir", , 1 ' Ajout des bouttons
      .Add , , "Ajouter", , 2
      .Add , , "Editer", , 3
      .Add , , "Supprimer", , 4
      .Add , , "Imprimer", , 5
      .Add , , "Quitter", , 6
   End With
Next

Conclusion :


Voila, de cette manière il n'est plus necessaire de recharger les icones avant chaque compilation du programme.
A noter aussi que les icones XP (32 bits RGB/A) ne sont pas compatibles avec VB , mais il y a une alternative aux icones 256 couleurs : Les icones "True Colors" (RGB - 24 bits - 16,8 M de couleurs) sont elles compatibles !! Perso je les créé avec axialis iconworkshop 6 ;)
(Je joint les icones pour exemple)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Danyz
Messages postés
98
Date d'inscription
dimanche 20 juillet 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
Je savais pas :P
Merci !
cs_NoFutur
Messages postés
171
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007
-
Salut,

Il y a dix fois plus simple pour règler ce problème à la noix mais ça demande un petit travail en amont.

Prend le temps de convertir tes icônes en BMP en leur donnant une couleur de fond unie (le mauve par exemple). Ensuite tu associe les BMP au composant comctl32.ocx en n'oubliant pas de définir aussi la propriété MaskColor de la même couleur de fond dans le composant ImageList.

Ensuite tu associe Imagelist avec la barre d'outils du même composant et tu défini ensuite normalement les icônes pour tes boutons.

Avantage: les couleurs sont respectées il n'y a plus de bug de destruction des couleurs et tu économise un composant supplémentaire dans ton projet ici en l'occurence mscomctl.ocx

Nota: Tu dois procéder de la même manière pour le TreeView et le ListView du composant comctl32.ocx

PS: tu trouveras ici une source qui te permettra de convertir les icones en BMP avec la couleur de fond :
http://www.vbfrance.com/code.aspx?ID=20137

Bonne prog ^_^
@plus

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.