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
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
; 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