Le contrôle Liste d'images - CtrlImageList

Thierry GASPERMENT

Ce contrôle affiche une liste d'images.

Retour à la page d'accueil.

Commentez

- Titre : Le contrôle Liste d'images - CtrlImageList

- Auteur : Thierry GASPERMENT

- Parution : 2 décembre 2009

- Mise à jour : 18 mai 2018

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2009 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.

Sommaire

- I. Préparation du contrôle

- II. Propriétés

- III. Méthodes

- III-A. ElementAdd

- III-B. ElementRemove

- III-C. Refresh

- III-D. Clear

- III-E. SortElementsByValue

- III-F. GetElementByValue

- III-G. ImageListAdd

- III-H. ImageListAddFromArray

- III-I. ImageListAddFromPicture

- III-J. ImageListAddFromControl

- III-K. ImageListAddFromAttachment

- III-L. ImageListExists

- III-M. ImageListRemove

- III-N. ImageListRemoveAll

- IV. Evénements

- IV-A. ActiveElementChanged

- IV-B. SelectionChanged

- IV-C. BeforeDraw

- IV-D. BeforeDrawMenu

- IV-E. MouseMove

- IV-F. MouseDown

- IV-G. MouseUp

- IV-H. MouseDblClick

- IV-I. KeyDown

- IV-J. AfterDrawImage

- IV-K. BeforeLoadImage

- V. Exemple

I - Préparation du contrôle

Pour un formulaire qui contient un cadre ou sous-formulaire subFormList.

Préparation de l'objet contrôle

Option Explicit

Private WithEvents oList As CtrlImageList

Private Sub Form_Load() ' UserForm_Initialize pour Excel
Set oList = CreateTGLControl(CtrlImageList, Me.subFormList)
End Sub

II - Propriétés

La colonne Get indique si la propriété est disponible en lecture.

La colonne Set indique si la propriété est disponible en écriture.

Propriété

Get

Let

Type

Explication

FontName

X

X

String

Nom de la police de caractères.

FontColor

X

X

Long

Couleur de la police de caractères.

FontColorSelected

X

X

Long

Couleur de la police de caractères d’une ligne sélectionnée.

FontSize

X

X

Long

Couleur de la police de caractères, en points.

BackColor

X

X

Long

Couleur de fond du contrôle.

MultipleSelection

X

X

Boolean

Définit si la sélection multiple est possible.

MultiSelectWithoutCtrl

X

X

Boolean

Définit si la sélection multiple se fait avec ou sans appuis sur la touche Control.

SelectionColor

X

X

Long

Couleur de surlignage des éléments sélectionnés.

AntialisingLevel

X

X

ETGLAntialiase

Niveau de lissage des images.
LibTGLGdiplus propose plus de niveau de lissage que LibTGL32.

FirstVisibleRow

X

X

Long

Numéro de la première ligne visible.
Utilisez ensuite Refresh pour mettre à jour l'affichage.

LastVisibleRow

X

Long

Numéro de la dernière ligne visible.

ImageWidth

X

X

Long

Largeur des images en pixels.

ImageRatio

X

X

Currency

Rapport hauteur sur largeur des images.

ActiveElement

X

X

CtrlImageListElement

Elément actif.
L'élément actif n'est pas forcément sélectionné.

Elements

X

Collection d'objets CtrlImageListElement

Collection d'éléments contenus dans l'arbre.

SelectedElement

X

CtrlImageListElement

Elément sélectionné.
Renvoie le premier élément trouvé.

MultipleSelectedElement

X

Collection d'objets CtrlImageListElement

Collection d'éléments sélectionnés.

ElementByPos

X

CtrlImageListElement

Recherche un élément avec sa ligne et sa colonne.

Menu

X

CtrlTreeMenu

Menu à afficher sur les images.

RaiseAfterDraw

X

X

Boolean

Mettre à Vrai pour déclencher les événements AfterDrawImage.

LoadInBackGround

X

X

Boolean

Mettre à Vrai pour que toutes les images du dossier se chargent avant leur affichage.
A réserver pour des dossiers peu volumineux.

MouseScrollStep

X

X

Long

Pas de défilement de la molette de la souris.

(Access uniquement)

Gdi

X

clGdiplus ou clGdi32

Objet de gestion du graphisme du contrôle.

ContainerControl

X

Access.SubForm ou MSForms.Frame

Contrôle Container.

Cadre ou Sous-Formulaire.

Container

Access.Form ou MSForms.Frame

Container.

Cadre ou Formulaire.
Pour Excel, ContainerControl et Container sont identiques.

III - Méthodes

III-A - ElementAdd

Ajoute un élément à la liste.

Paramètre

Type

Explication

pTexte

String

Texte affiché dans l'arbre.

pKey

String

Identifiant de l'élément.
Passez une chaîne vide pour générer un identifiant unique.

Valeur renvoyée

CtrlImageListElement

Elément ajouté.

III-B - ElementRemove

Retire un élément de la liste.

Paramètre

Type

Explication

pKey

String

Identifiant de l'élément à retirer.

III-C - Refresh

Redessine le contrôle.

III-D - Clear

Vide la liste.

Utilisez ensuite Refresh pour mettre à jour l'affichage.

III-E - SortElementsByValue

Trie les éléments par valeur.

Paramètre

Type

Explication

pValueName

String

Identifiant de la valeur sur laquelle s'effectue le tri.

pDescending

Boolean

Si Vrai, le tri est descendant, sinon il est ascendant par défaut.

III-F - GetElementByValue

Recherche un élément par une valeur.

Paramètre

Type

Explication

pValueName

String

Identifiant de la valeur sur laquelle s'effectue la recherche.

pValue

Variant

Valeur à rechercher.

Valeur renvoyée

CtrlImageListElement

Le premier élément trouvé est renvoyé.
Si aucun élément n'est trouvé, la fonction renvoie Nothing

III-G - ImageListAdd

Ajoute une image à la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pFile

String

Chemin du fichier de l'image.

pThumbNail

Boolean

Si Vrai, utilise la miniature Exif pour un affichage plus rapide.
Ne fonctionne qu'avec Gdi+.

pIcon

ETGLIconType

Type d'icône à charger.

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-H - ImageListAddFromArray

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d'un tableau de byte.

Pour Gdi32, le tableau contient un bitmap tel que défini dans la propriété PictureData d'un contrôle image.

Pour Gdi+, le tableau contient une image telle qu'on peut la trouver dans un fichier (jpeg, png, ...).

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pArray

Tableau de Byte

Contenu de l'image.

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-I - ImageListAddFromPicture

Ajoute une image à la liste d'images du contrôle.

L'image est définie par une image et un masque gdi32.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pPicture

Long

Bitmap gdi32 contenant l'image.

pMask

Long

Bitmap gdi32 contenant le masque.

pDelete

Boolean

Si Vrai, les bitmaps utilisés sont ensuite supprimés.

pPersistent

Boolean

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

Exemple :

Ajout d'une image à partir d'un contrôle de menu

With Application.CommandBars("Database").Controls(1)
oList.ImageListAddFromPicture "monbouton", .Picture, .Mask
End With

III-J - ImageListAddFromControl

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d'un contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pControl

Control

Contrôle contenant l’image

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-K - ImageListAddFromAttachment

A partir d’Access 2007.

Ajoute une image à la liste d'images du contrôle.

L'image est définie par le contenu d’un champ pièce-jointe.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

pTable

String

Nom de la table

pField

String

Nom de la colonne

pWhere

String

Clause where

pPersistent

String

Si Vrai, l'image est persistante et ne sera pas supprimée par la fonction Clear.

Valeur renvoyée

Boolean

Vrai si l'image a été ajoutée avec succès.

III-L - ImageListExists

Teste si une image existe dans la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

Valeur renvoyée

Boolean

Vrai si l'image existe.

III-M - ImageListRemove

Retire une image de la liste d'images du contrôle.

Paramètre

Type

Explication

pKey

String

Identifiant de l'image.

Une erreur est levée si l'identifiant n'est pas valide (image inexistante).

III-N - ImageListRemoveAll

Retire toutes les images de la liste d'images du contrôle.

Les images qui ont été ajoutées avec le paramètre pPersistent = Vrai ne sont pas retirées.

IV - Evénements

IV-A - ActiveElementChanged

S'exécute sur changement de l'élément actif.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément actif.
Nothing si aucun élément n'est actif.

IV-B - SelectionChanged

S’exécute lorsque la sélection des lignes est modifiée.

IV-C - BeforeDraw

S'exécute avant dessin d'un élément.

Paramètre

Type

Explication

pElement

CtrlImageListElementBeforeDraw

Elément à dessiner.

Les modifications apportées à l'élément ne sont pas définitives.
Elles ne sont valables que le temps du dessin de cet élément.

IV-D - BeforeDrawMenu

S'exécute avant dessin du menu.

Paramètre

Type

Explication

pElement

CtrlImageListElementBeforeDraw

Elément à dessiner.

pMenu

CtrlImageListMenu

Elément à dessiner.

pElement est l'élément après passage dans l'événement BeforeDraw.

Les modifications apportées au menu sont définitifs.
Elles s'appliqueront également aux prochains dessins du menu.

IV-E - MouseMove

S'exécute sur déplacement de la souris sur le contrôle.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément survolé par la souris.
Nothing si aucun élément n'est survolé.

Button

Integer

Bouton de la souris appuyé.

pMenuKey

String

Identifiant de l'élément de menu sous la souris.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-F - MouseDown

S'exécute sur souris appuyée sur le contrôle.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément survolé par la souris.
Nothing si aucun élément n'est survolé.

pMenuKey

String

Identifiant de l'élément de menu sous la souris.

Button

Integer

Bouton de la souris appuyé.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-G - MouseUp

S'exécute sur souris relâchée sur le contrôle.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément survolé par la souris.
Nothing si aucun élément n'est survolé.

pMenuKey

String

Identifiant de l'élément de menu sous la souris.

Button

Integer

Bouton de la souris relâché.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-H - MouseDblClick

S'exécute sur double-clic de la souris sur le contrôle.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément survolé par la souris.
Nothing si aucun élément n'est survolé.

pMenuKey

String

Identifiant de l'élément de menu sous la souris.

Button

Integer

Bouton de la souris appuyé.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

X

Single

Position de la souris sur le contrôle, en twips.

Y

Single

Position de la souris sur le contrôle, en twips.

IV-I - KeyDown

S'exécute sur touche appuyée sur le contrôle.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément survolé par la souris.
Nothing si aucun élément n'est survolé.

pMenuKey

String

Identifiant de l'élément de menu sous la souris.

KeyCode

Integer

Code de la touche appuyée.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

IV-J - AfterDrawImage

S'exécute après dessin d'un élément.

Cet événement n'est déclenché que si RaiseAfterDraw = True.

Paramètre

Type

Explication

pElement

CtrlImageListElementBeforeDraw

Elément à dessiner.

pCancelDraw

Boolean

Si Vrai, ne redessine pas l'image.

Il est possible de modifier l'image ImageName de l'élément.
Les modifications apportées à l'élément ne sont pas définitives.
Elles ne sont valables que le temps du dessin de cet élément.

Exemple :

Affiche un texte en haut à gauche des images

Private Sub oList_AfterDrawImage(pElement As CtrlImageListElementBeforeDraw, pCancelDraw As Boolean)
If pElement.ImageName <> "" Then
oList.Gdi.ImageListDrawText pElement.ImageName, "test", 34, , 0, 0, 100, 100, 0, 0
End If
End Sub

IV-K - BeforeLoadImage

S'exécute avant le chargement d'une image pour permettre un chargement spécifique.

Paramètre

Type

Explication

pElement

CtrlImageListElement

Elément à dessiner.

pCancelLoad

Boolean

Si Vrai, annule le chargement de l'image par le contrôle.

Il est possible de charger l'image ImageName de l'élément de manière spécifique.

Astuce : Mettre une valeur quelconque dans la propriété ImagePath de l'élément à sa création pour charger l'image de manière asynchrone.

Exemple :

Charge une image

Private Sub oList_BeforeLoadImage(pElement As CtrlImageListElement, pCancelLoad As Boolean)
oList.ImageListAdd pElement.ImagePath, pElement.ImagePath, , True
pElement.ImageName = pElement.ImagePath
pCancelLoad = True
End Sub

V - Exemple

Pour un formulaire qui contient un cadre ou sous-formulaire subFormList.

Exemple de liste d'images avec menu

Option Explicit

Private WithEvents oList As CtrlImageList

Private Sub Form_Load() ' UserForm_Initialize pour Excel
Dim lCpt As Long
Dim lImg(1 To 6) As String
' Initialise le contrôle
Set oList = CreateTGLControl(CtrlImageList, Me.subFormList)
' Sélection multiple avec CTRL
oList.MultipleSelection = True
' Tableau de 6 images
lImg(1) = CurrentProject.Path & "\img\131746760.jpg"
lImg(2) = CurrentProject.Path & "\img\140594848.jpg"
lImg(3) = CurrentProject.Path & "\img\163599504.jpg"
lImg(4) = CurrentProject.Path & "\img\213847384.jpg"
lImg(5) = CurrentProject.Path & "\img\DSCN0323.JPG"
lImg(6) = CurrentProject.Path & "\img\logo.gif"
' Images du menu affiché sur l'image
oList.ImageListAdd "menu-", CurrentProject.Path & "\img\decocher.bmp", , , True
oList.ImageListAdd "menu+", CurrentProject.Path & "\img\cocher.bmp", , , True
' Taille du menu
oList.Menu.SizePercent = 20
' Fond du menu
oList.Menu.BackColor = vbWhite
' Opacité du menu
oList.Menu.Opacity = 80
' Ajout des boutons de menu
oList.Menu.ElementAdd "menu-", "-", "menu-"
oList.Menu.ElementAdd "menu+", "+", "menu+"
' Curseur sur menu
oList.Menu.MouseCursor = IDC_HAND
' Alignement du menu
oList.Menu.HorzAlign = TGLAlignHorzRight
oList.Menu.VertAlign = TGLAlignVertDown
' Niveau de lissage des images
oList.AntialisingLevel = TGLAntialiaseLowQuality
' Vide la liste
oList.Clear
' Ajoute les images du tableau
For lCpt = LBound(lImg) To UBound(lImg)
With oList.ElementAdd("image" & lCpt)
.ImagePath = lImg(lCpt) ' Chemin de l'image
.Text = Dir(lImg(lCpt)) ' Texte à afficher
.MouseCursor = IDC_HAND ' Curseur
.Value("Compteur") = 0 ' Valeur du compteur
.DisplayValue.ValueName = "Compteur" ' Affiche le compteur sur l'image
.DisplayValue.FontColor = vbBlue ' Couleur bleue
.DisplayValue.BackColor = vbYellow ' Fond jaune
.DisplayValue.FontSize = 20 ' Taille du texte
End With
Next
' Dessine le contrôle
oList.Refresh
End Sub

' Avant dessin d'un élément
Private Sub oList_BeforeDraw(pElement As CtrlImageListElementBeforeDraw)
' Si compteur = 0 => pas d'affichage de texte
If pElement.Value("Compteur") = 0 Then
pElement.DisplayValue.ValueName = ""
End If
' ===> Pour l'exemple :
' Affichage en gras de la première colonne
pElement.Bold = (pElement.Column = 1)
' Si deuxième colonne => affichage à droite en rouge
If (pElement.Column = 2) Then
pElement.DisplayValue.HorzAlign = TGLAlignHorzRight
pElement.FontColor = vbRed
End If
End Sub

' Avant dessin du menu
Private Sub oList_BeforeDrawMenu(pElement As CtrlImageListElementBeforeDraw, pMenu As CtrlImageListMenu)
' N'affiche pas le menu "-" si le compteur est égal à 0
If pElement.Value("Compteur") = 0 Then
pMenu.ElementByName("menu-").Visible = False
End If
End Sub

' Sur click
Private Sub oList_MouseDown(pElement As CtrlImageListElement, pMenuKey As String, _
Button As Integer, Shift As Integer, X As Single, Y As Single, Cancel As Boolean)
' Si click sur bouton + ou - => met à jour le compteur et réaffiche l'image
If Not pElement Is Nothing Then
If pMenuKey = "menu+" Then
pElement.Value("Compteur") = pElement.Value("Compteur") + 1
oList.Refresh
ElseIf pMenuKey = "menu-" Then
pElement.Value("Compteur") = pElement.Value("Compteur") - 1
If pElement.Value("Compteur") < 0 Then pElement.Value("Compteur") = 0
oList.Refresh
End If
End If
End Sub

Résultat obtenu :