Comment changer la couleur de fond d'un treeview

0/5 (9 avis)

Snippet vu 8 019 fois - Téléchargée 35 fois

Contenu du snippet

petit code que j'ai trouvé sur developpez.com assez astucieux.
Je l'ai essayé et ça marche alors j'ai pensé que ça pourrait servir à kelk1 d'autre.

Source / Exemple :


'A ajouter dans un module du projet
Private Const GWL_STYLE As Long = (-16)
Private Const TVS_HASLINES As Long = 2
Private Const TV_FIRST As Long = &H1100
Private Const TVM_SETBKCOLOR As Long = (TV_FIRST + 29)
Private Const TVM_SETTEXTCOLOR As Long = (TV_FIRST + 30)

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                                    (ByVal hwnd As Long, ByVal wMsg As Long, _
                                     ByVal wParam As Long, lParam As Any) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                                      (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                                      (ByVal hwnd As Long, ByVal nIndex As Long, _
                                       ByVal dwNewLong As Long) As Long

'Ensuite, placez la procédure suivante dans la section générale du formulaire:

Public Sub SetTreeViewArrPlan(ByVal treeview As MSComctlLib.treeview, ByVal couleur As Long)

    Dim style As Long, noeud As Node
   
    'Changement de l'arrière-plan du treeview
    Call SendMessage(treeview.hwnd, TVM_SETBKCOLOR, 0, ByVal couleur)
   
    'réinitialisation de l'arbre
    style = GetWindowLong(treeview.hwnd, GWL_STYLE)
   
    'Si l'arbre a des lignes, on les désactive temporairement pour que
    'l'arrière-plan se redessine proprement, puis on les réactive
   
    If style And TVS_HASLINES Then
        SetWindowLong treeview.hwnd, GWL_STYLE, style Xor TVS_HASLINES
        SetWindowLong treeview.hwnd, GWL_STYLE, style
    End If
   
    'on change la couleur de fond des noeuds
    For Each noeud In treeview.Nodes
        noeud.BackColor = couleur
    Next

End Sub

'L'appel se fait comme suit :
Dim couleur As Long
couleur = vbRed
SetTreeViewArrPlan TreeView1, couleur

Bonne prog à tous!

A voir également

Ajouter un commentaire Commentaires
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
30 oct. 2006 à 09:47
bonjour,
l'underligne si je peux appeler comme ca sur une autre source j'ai pu voir comment change rle fond , la couleur d'ecriture , la couleur des ligne mais il reste comme un genre de surlignage gris sur le texte (sauf quand on click dessus et rester appuyer la sa deviend noir et texte vert (comme j'ai defini) sinon ses texte noir sur genre de label qui se suivent fond gris et ecriture noir et il faut donc click sur un noeud , et reclicker en restant appuyez sur un autre noeud pour que le precedent devienne comme defini fond noir et police verte :-/ enfin vous voyez ?
y a pas moyen de rectifier ca ?
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
1 mai 2006 à 16:56
les treeview sont énorméments pratik mais ils ont un inconvenient majeur : les node ont un index maxi qui prend pour valeur max 32767

donc dans la pratique si vous utilisez ça pour lister le contenu de votre disque dur _ et bien ça va planter lors de laffichage du 32768 ème dossier trouvé sur votre disque ...
Manu_12 Messages postés 11 Date d'inscription vendredi 2 janvier 2004 Statut Membre Dernière intervention 22 octobre 2007
19 janv. 2005 à 00:02
dans la boucle "each noeud..." tu peux rajouter aussi
'noeud.foreColor = XXXX ' pour le texte et meme
specifier avant l'appel de cette fonction
''MyImageList.backcolor = couleurdefond" en prenant la meme utilisé dans ta sub pour avoir les pictures des noeuds sur fond de meme couleur.

Par contre petit bug sur le dernier noeud Parent d'une branche j'ai une zone rectangulaire blanche qui part du signe "+" du noeud et qui descend jusqu'a la branche suivante :(
cs_topan Messages postés 7 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 septembre 2004
31 août 2004 à 12:11
trOpiic, j'y pense ,si t tu veux avoir des contrôles assez convivial essaye un peu d'utiliser fireworks pr le design du formulaire.
Je ne l'ai pas fait mais je crois ke ça devait être possible.
Ah oueh MarmOtte pourkoi du "hais" les treeviews.
Ils t'ont peut être fait une mauvaise surprise.
Partage ton experience ça peut servir aux autres.
Bonne prog!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
31 août 2004 à 08:12
pour info, marm0tte, pourquoi tu "hais" les Treeviews ?
Afficher les 9 commentaires

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.