Page 1 sur 1

[R]Surligner ligne entière d'un Treeview

Posté : mar. 30 août 2016 11:13
par stramor
Bonjour,

Je vais expliquer ma demande par des illustrations, ce sera plus compréhensible.

Alors, je souhaiterai mettre une couleur de fond à chaque ligne de mon Treeview en fonction du niveau de l'item,
une illustration vaudra mieux, par exemple si j'utilise GUICtrlSetBkColor($TreeView4, 0x00FF00) cela me donne le résultat suivant (http://hpics.li/6646468) , or je souhaiterai que, pas seulement l'item soit surligné d'une couleur, mais bien toute la ligne (cette image à été fait sur paint rapidement pour donner une idée du résultat souhaité: http://hpics.li/f57cd93)

Auriez-vous des pistes ou pourriez-vous m'aider? merci d'avance!


fichier.ini (test)
[lien;]
google;//www.google.fr=autoit;https://www.autoitscript.fr
google2;//www.google.com=//www.google.com;https://www.autoitscript.fr
[DOC;//www.google.fr]
mes documents;=C\Bibliothèques\Documents;
[autres liens;]
programmation;=autoit2;https://www.autoitscript.fr/ |exemple;www.exemple.com

le code:
;
;                                       TEST v.1
;
;includes------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListboxConstants.au3>
#include <EditConstants.au3>
#include <GuiTreeView.au3>
#include <Array.au3>

;initialisation variables--------------------------------------------------------------------------------------------------------------------------------------------------------------

$fDblClk = False
Dim  $i, $var, $file, $TreeView1, $var2, $TreeView2, $TreeView3, $test1, $varx, $var, $file, $x, $reference[100][3], $nbreference = 0, $z
$file = "fichier.ini"

;initialisation GUI--------------------------------------------------------------------------------------------------------------------------------------------------------------------

$GUI = GUICreate("TEST", 300 , @DesktopHeight, @DesktopWidth-300 , 0,$WS_POPUP,$WS_EX_COMPOSITED);création de la fenêtre
$barredep = GUICtrlCreateLabel("                                 TEST", 0, 0, 300, 20, -1, $GUI_WS_EX_PARENTDRAG) ;barre de déplacement du widget
$barredep = GuiCtrlSetColor(-1,0X0000FF)
$barredep = GUICtrlSetBkColor (-1,0X606060)
$list = GUICtrlCreateTreeView(0, 50, 300,@DesktopHeight-60 , BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE);création de list
GUISetState(@SW_SHOW, $GUI)

;initialisation----------------------------------------------------------------------------------------------------------------------------------------------------------------------

GUIRegisterMsg($WM_NOTIFY, "MY_WM_NOTIFY") ; initialisation double clique list
_IniGetSectionNames();fonction chargement list à partir d'un fichier ini


;evenementiel GUI----------------------------------------------------------------------------------------------------------------------------------------------------------------------
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

       EndSwitch

         If $fDblClk = True Then ; fonction en cas de double clique sur list
            $sText = _GUICtrlTreeView_GetText($list, _GUICtrlTreeView_GetSelection($list)); recupération de l'élément sélectionné dans list
             For $z = 0 To $nbreference
             if $reference[$z][1] = $sText Then
               if $reference[$z][2] <> '' Then ShellExecute($reference[$z][2]);si lien associé Item, lancer lien
              endif
            Next


          $fDblClk = False ; remise à zéro de la variable pour pouvoir double cliquer à nouveau
         EndIf

    WEnd
;libération de la mémoire------------------------------------------------------------------------------------------------------------------------------------------------------------

;fonctions---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func MY_WM_NOTIFY($hWnd, $Msg, $wParam, $lParam); fonction detection double clique sur liste

    Switch $wParam
        Case $list
            Local $tagNMHDR = DllStructCreate("int;int;int", $lParam)
            If @error Then Return
            If DllStructGetData($tagNMHDR, 3) = $NM_CLICK Then
            $fDblClk = True
            ControlTreeView($GUI, "", $list, "Select", "")
            _GUICtrlTreeView_SetSelected($list, "", False)
         endif
    EndSwitch
    $tagNMHDR = 0

EndFunc

;fonction remplissage liste----------------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniGetSectionNames()
    $varx = IniReadSectionNames($file)
    If @error Then
        MsgBox(4096, "", "Error occured, probably no INI file.")
    Else
        For $x = 1 To $varx[0]
            _IniReadInfo($varx[$x])
        Next
    EndIf
EndFunc
;fonction remplissage liste suite----------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniReadInfo($sSection)
    Dim $sValue
    $var = IniReadSection($file, $sSection)
    If @error Then
        MsgBox(4096, "", "Error occured, check INI file.")
    Else
     Local $temporaire = StringSplit($sSection, ';')
     $reference[$nbreference][1] = $temporaire[1]
     $TreeView2 = GUICtrlCreateTreeViewitem($temporaire[1], $list)
     if $temporaire[2] <> '' Then ;test si lien associé à l'item de la viewlist
     $reference[$nbreference][2] = $temporaire[2] ;ajout d'un lien associé à l'item de la viewlist
     GuiCtrlSetColor(-1,0X0000FF)
     endif
     $nbreference = $nbreference + 1
        For $i = 1 To $var[0][0]
         $temporaire = StringSplit($var[$i][0], ';')
            $TreeView3 = GUICtrlCreateTreeViewItem($temporaire[1], $TreeView2)
         $reference[$nbreference][1] = $temporaire[1]
         if $temporaire[2] <> '' Then ;test si lien associé à l'item de la viewlist
         $reference[$nbreference][2] = $temporaire[2] ;ajout d'un lien associé à l'item de la viewlist
         GuiCtrlSetColor(-1,0X0000FF)
         EndIf
         $nbreference = $nbreference + 1
            $sValue = StringSplit($var[$i][1], '|')
            For $x = 1 To $sValue[0]
                if $sValue[$x] <> '' Then
               $temporaire = StringSplit($sValue[$x], ';')
               $TreeView4 = GUICtrlCreateTreeViewitem($temporaire[1], $TreeView3)
               $reference[$nbreference][1] = $temporaire[1]
               if $temporaire[2] <> '' Then ;test si lien associé à l'item de la viewlist
               $reference[$nbreference][2] = $temporaire[2] ;ajout d'un lien associé à l'item de la viewlist
               GuiCtrlSetColor(-1,0X0000FF)
               endif
               $nbreference = $nbreference + 1
               endif
            Next
        Next
    EndIf
 EndFunc

Re: Surligner ligne entière d'un Treeview

Posté : mar. 30 août 2016 14:20
par stramor
Est-ce possible au moins?

En alternative je peux rendre le fond de la Treeview transparente et placer des barres de couleurs en dessous, mais comment les placer automatiquement et au bon emplacement, de plus qu'il faut les faire disparaitre et apparaitre en fonction du déroulement de la treeview... Bref je pense que c'est un mauvais chemin

HELP :?

Re: Surligner ligne entière d'un Treeview  

Posté : mar. 30 août 2016 20:20
par mikell
$TVS_FULLROWSELECT :P

Je te suggère une lecture très attentive de la page _GUICtrlTreeView_Create du fichier d'aide

Re: Surligner ligne entière d'un Treeview

Posté : mer. 31 août 2016 10:25
par stramor
Merci beaucoup ! ça marche!

Re: [R]Surligner ligne entière d'un Treeview

Posté : mer. 31 août 2016 22:03
par Tlem
Bonsoir.
Il serait dommage que http://hpics.li ne fournisse plus d'ici quelques mois/années les images que vous y avez déposé.

Ce forum permet d'héberger pas mal de type de fichier, dont des images. ^^
La réédition de votre premier message permettrai une plus grande pérennité des éléments de votre demande. ^^

Envoyé de mon appareil mobile avec Tapatalk