Le contrôle Arbre - CtrlTree

Thierry GASPERMENT

Ce contrôle affiche des éléments sous forme d'arbre.

Retour à la page d'accueil.

Commentez

- Titre : Le contrôle Arbre - CtrlTree

- 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. ExpandAll

- III-F. CollapseAll

- III-G. SortElementsByValue

- III-H. GetElementByValue

- III-I. ImageListAdd

- III-J. ImageListAddFromArray

- III-K. ImageListAddFromPicture

- III-L. ImageListAddFromControl

- III-M. ImageListAddFromAttachment

- III-N. ImageListExists

- III-O. ImageListRemove

- III-P. ImageListRemoveAll

- IV. Evénements

- IV-A. ActiveElementChanged

- IV-B. ExpandElement

- IV-C. CollapseElement

- IV-D. BeforeDraw

- IV-E. Draw

- IV-F. MouseMove

- IV-G. MouseDown

- IV-H. MouseUp

- IV-I. MouseDblClick

- IV-J. KeyDown

- V. Exemple

I - Préparation du contrôle

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

Préparation de l'objet contrôle

Option Explicit

Private WithEvents oTree As CtrlTree

Private Sub Form_Load() ' UserForm_Initialize pour Excel
Set oTree = CreateTGLControl(CtrlTree, Me.subFormTree)
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

DisplayAsTree

X

X

Long

Affichage sous forme d'arbre.
Si Faux, les éléments sont affichés l'un en dessous de l'autre comme une simple liste.

DisplayImages

X

X

Long

Affichage des images.
Si Faux, les images ne sont pas affichées devant les éléments.

FontName

X

X

String

Nom de la police de caractères.

FontColor

X

X

Long

Couleur de la police de caractères.

FontSize

X

X

Long

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

BackColor

X

X

Long

Couleur de fond du contrôle.

SelectionColor

X

X

Long

Couleur de surlignage de la ligne sélectionnée.

AntialisingLevel

X

X

ETGLAntialiase

Niveau de lissage des images.
LibTGLGdiplus propose plus de niveaux 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.

ActiveElement

X

CtrlTreeElement

Elément sélectionné.

CountVisible

X

Long

Nombre d'éléments affichables sur le contrôle.
Dépend de la taille du contrôle et de la taille des éléments.

Elements

X

Collection d'objets CtrlTreeElement

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

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 à l'arbre.

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.

pParentKey

String

Identifiant de l'élément parent.
Passez une chaîne vide pour ajout un élément racine.

Valeur renvoyée

CtrlTreeElement

Elément ajouté.

III-B - ElementRemove

Retire un élément de l'arbre.

Paramètre

Type

Explication

pKey

String

Identifiant de l'élément à retirer.
Les éléments fils sont également retirés.

III-C - Refresh

Redessine le contrôle.

Paramètre

Type

Explication

pRepaint

Boolean

Si Faux, le contrôle n'est pas redessiné à l'écran.

III-D - Clear

Vide l'arbre.

Utilisez ensuite Refresh pour mettre à jour l'affichage.

III-E - ExpandAll

Déroule tous les noeuds.

Utilisez ensuite Refresh pour mettre à jour l'affichage.

III-F - CollapseAll

Replie tous les noeuds.

Utilisez ensuite Refresh pour mettre à jour l'affichage.

III-G - 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-H - 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

CtrlTreeElement

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

III-I - 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.

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-J - 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-K - 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)
oGrid.ImageListAddFromPicture "monbouton", .Picture, .Mask
End With

III-L - 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-M - 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-N - 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-O - 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-P - 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

CtrlTreeElement

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

IV-B - ExpandElement

S'exécute sur ouverture d'un noeud.

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

IV-C - CollapseElement

S'exécute sur fermeture d'un noeud.

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

IV-D - BeforeDraw

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

Paramètre

Type

Explication

pElement

CtrlTreeElementBeforeDraw

Élé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-E - Draw

S'exécute lors du dessin d'un élément.

Paramètre

Type

Explication

pElement

CtrlTreeElementBeforeDraw

Élément à dessiner.

pLeft

Long

Position gauche en pixels

pTop

Long

Position haut en pixels

pRight

Long

Position droite en pixels

pBottom

Long

Position bas en pixels

Cancel

Boolean

Mettre à Vrai pour annuler le dessin standard.

Grâce à l’objet Gdi, il est possible de dessiner un élément dans le cade délimité par les positions en arguments.

pRight peut être modifié afin de préciser une modification de la largeur de l’élement.

Exemple :

Dessin personnalisé d’un élément

Private Sub oTree2_Draw(pElement As CtrlTreeElementBeforeDraw, pLeft As Long, pTop As Long, pRight As Long, pBottom As Long, Cancel As Boolean)
If pElement.ParentKey <> "" Then
Cancel = True
With pElement.Tree.Gdi
.DrawText pElement.Text, .FontSizeToPixel(pElement.Tree.FontSize), , pLeft, pTop, pLeft + 100, pBottom, 0, , IIf(pElement.Active, pElement.Tree.FontColorSelected, pElement.Tree.FontColor), , IIf(pElement.Active, pElement.Tree.SelectionColor, -1)
.DrawLine pLeft + 100, pTop, pLeft + 100, pBottom
.DrawText "blablablablablablablablablablablablablablablabla46", .FontSizeToPixel(pElement.Tree.FontSize), , pLeft + 110, pTop, pRight, pBottom, 0
pRight = .LastTextRight
End With
End If
End Sub

Dessin personnalisé d’un élément

IV-F - MouseMove

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

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

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 ou points.

Y

Single

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

IV-G - MouseDown

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

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

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 ou points.

Y

Single

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

IV-H - MouseUp

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

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

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 ou points.

Y

Single

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

IV-I - MouseDblClick

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

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

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 ou points.

Y

Single

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

IV-J - KeyDown

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

Paramètre

Type

Explication

pElement

CtrlTreeElement

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

KeyCode

Integer

Code de la touche appuyée.

Shift

Integer

Etat des touches Shift, Alt et Ctrl.

V - Exemple

Sous Access, pour un formulaire qui contient un sous-formulaire subFormTree.

Exemple d'arbre

Option Explicit

' Objet Arbre
Private WithEvents oTree As CtrlTree

Private Sub Form_Load()
' Initialisation du contrôle
Set oTree = CreateTGLControl(CtrlTree, Me.subFormTree)
' Ajoute un élément racine
With oTree.ElementAdd("Element Racine n°1")
' Ajoute 2 fils à cet élément (.key est l'identifiant de l'élément)
oTree.ElementAdd "Element Fils 1", , .Key
oTree.ElementAdd "Element Fils 2", , .Key
End With
' Ajoute un deuxième élément racine
With oTree.ElementAdd("Element Racine n°2")
' Ajoute 3 fils à cet élément
oTree.ElementAdd "Element Fils 1", , .Key
oTree.ElementAdd "Element Fils 2", , .Key
oTree.ElementAdd "Element Fils 3", , .Key
End With
' Redessine le contrôle
oTree.Refresh
End Sub

Private Sub oTree_ActiveElementChanged(pElement As LibTGL.CtrlTreeElement)
' Affiche le texte de l'élément actif dans la barre d'état
If pElement Is Nothing Then
SysCmd acSysCmdClearStatus
Else
SysCmd acSysCmdSetStatus, "Sélection de " & pElement.Text
End If
End Sub

Exemple d'arbres sous Access :

Menu

Affichage du contenu d'un fichier XML