Crée un contrôle TreeView pour traiter des données organisées en arbre
#include <GuiTreeView.au3>
_GUICtrlTreeView_Create ( $hWnd, $iX, $iY [, $iWidth = 150 [, $iHeight = 150 [, $iStyle = 0x00000037 [, $iExStyle = 0x00000000]]]] )
$hWnd | Handle de la fenêtre parent ou propriétaire |
$iX | Position horizontale du contrôle |
$iY | Position verticale du contrôle |
$iWidth | [optionnel] Largeur du contrôle |
$iHeight | [optionnel] Hauteur de contrôle |
$iStyle | [optionnel] Style du contrôle: $TVS_CHECKBOXES - Installe des cases à cocher pour les noeuds. Une case à cocher ne s'affichera que si une image est associée au noeud. Pour cette option, le contrôle utilise efficacement DrawFrameControl pour créer et définir une liste d'images d'état contenant deux images. L'image de l'état 1 est la case décochée et l'image de l'état 2 est la case cochée. Définir l'état de l'image à zéro supprime la case à cocher. La version 5.80 affiche une case à cocher, même si aucune image n'est associée au noeud. $TVS_DISABLEDRAGDROP - Empêche le contrôle d'envoyer des messages de notification $TVN_BEGINDRAG $TVS_EDITLABELS - Permet à l'utilisateur de modifier les étiquettes des noeuds $TVS_FULLROWSELECT - Permet la sélection d'une rangée entière. La totalité de la ligne du noeud sélectionné est mise en surbrillance et un clic n'importe où sur la ligne du noeud, provoquera sa sélection. Cette option ne peut pas être utilisée en conjonction avec le style $TVS_HASLINES. $TVS_HASBUTTONS - Affiche les boutons plus et moins à côté des noeuds parents. L'utilisateur clique sur les boutons pour développer ou réduire la liste des noeuds enfants du noeud parent. Pour inclure des boutons associés aux noeuds de la racine, vous devez également spécifier $TVS_LINESATROOT. $TVS_HASLINES - Utilise des lignes pour afficher la hiérarchie des noeuds $TVS_INFOTIP- Obtient des informations d'info-bulle en envoyant la notification $TVN_GETINFOTIP $TVS_LINESATROOT - Utilise des lignes pour lier les noeuds de la racine du contrôle. Cette valeur est ignorée si $TVS_HASLINES n'est pas aussi spécifiée. $TVS_NOHSCROLL - Désactive le défilement horizontal dans le contrôle. Le contrôle n'affichera pas les barres de défilement horizontal. $TVS_NONEVENHEIGHT - Définit la hauteur des noeuds à une hauteur paire avec le message $TVM_SETITEMHEIGHT. Par défaut, la hauteur des noeuds doit avoir une valeur impaire. $TVS_NOSCROLL - Désactive à la fois le défilement horizontal et vertical dans le contrôle. Le contrôle n'affichera pas les barres de défilement. $TVS_NOTOOLTIPS- Désactive les info-bulles $TVS_RTLREADING - Définit l'affichage du texte de droite à gauche $TVS_SHOWSELALWAYS - Oblige un noeud sélectionné à rester sélectionné lorsque le contrôle perd le focus $TVS_SINGLEEXPAND - Oblige un noeud en cours de sélection à se développer et un noeud en cours de désélection à se réduire. Si la souris est utilisée en simple clic pour sélectionner un noeud et que le noeud est fermé est fermé, il sera développé. Si l'utilisateur maintient la touche CTRL enfoncée tout en sélectionnant un objet, le noeud en cours de désélection ne sera pas réduit. La version 5.80 oblige le noeud en cours de sélection à se développer et le noeud en cours de désélection à se réduire. Si l'utilisateur maintient la touche CTRL enfoncée tout en sélectionnant un noeud, le noeud en cours de désélection ne sera pas réduit. $TVS_TRACKSELECT - Oblige la mise à jour en temps réel Par défaut: $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS Forcés: $WS_CHILD, $WS_VISIBLE |
$iExStyle | [optionnel] Style de contrôle étendu |
Succès: | Retourne le handle du contrôle. |
Échec: | Retourne 0. |
Cette fonction est destinée aux utilisateurs avertis et à ceux qui désirent comprendre le fonctionnement du contrôle.
#include <GUIConstantsEx.au3> #include <GuiTreeView.au3> #include <WindowsConstants.au3> Global $g_hTreeView Example() Func Example() Local $hGUI, $hItem Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES) $hGUI = GUICreate("(UDF Created) TreeView Create", 400, 300) $g_hTreeView = _GUICtrlTreeView_Create($hGUI, 2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") _GUICtrlTreeView_BeginUpdate($g_hTreeView) For $x = 1 To Random(2, 10, 1) $hItem = _GUICtrlTreeView_Add($g_hTreeView, 0, StringFormat("[%02d] New Item", $x)) For $y = 1 To Random(2, 10, 1) _GUICtrlTreeView_AddChild($g_hTreeView, $hItem, StringFormat("[%02d] New Child", $y)) Next Next _GUICtrlTreeView_EndUpdate($g_hTreeView) ; Boucle jusqu'à ce que l'utilisateur quitte. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview $hWndTreeview = $g_hTreeView If Not IsHWnd($g_hTreeView) Then $hWndTreeview = GUICtrlGetHandle($g_hTreeView) $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndTreeview Switch $iCode Case $NM_CLICK ; L'utilisateur a cliqué sur le bouton gauche de la souris dans le contrôle _DebugPrint("$NM_CLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Retour 1; non nul pour interdire le traitement par défaut Return 0 ; zéro pour permettre le traitement par défaut Case $NM_DBLCLK ; L'utilisateur a double-cliqué sur le bouton gauche de la souris dans le contrôle _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Retour 1; non nul pour interdire le traitement par défaut Return 0 ; zéro pour permettre le traitement par défaut Case $NM_RCLICK ; L'utilisateur a cliqué sur le bouton droit de la souris dans le contrôle _DebugPrint("$NM_RCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Retour 1; non nul pour interdire le traitement par défaut Return 0 ; zéro pour permettre le traitement par défaut Case $NM_RDBLCLK ; L'utilisateur a double-cliqué sur le bouton droit de la souris dans le contrôle _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Retour 1; non nul pour interdire le traitement par défaut Return 0 ; zéro pour permettre le traitement par défaut Case $NM_KILLFOCUS ; Le contrôle a perdu le focus d'entrée _DebugPrint("$NM_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Aucune valeur de retour Case $NM_RETURN ; Le contrôle a le focus d'entrée et l'utilisateur a appuyé sur une touche _DebugPrint("$NM_RETURN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Retour 1; non nul pour interdire le traitement par défaut Return 0 ; zéro pour permettre le traitement par défaut ; Case $NM_SETCURSOR; Le contrôle positionne le curseur en réponse à un message WM_SETCURSOR ; Local $TINFO = DllStructCreate ($tagNMMOUSE, $lParam) ; $hwndFrom = HWnd (DllStructGetData ($TINFO," hwndFrom")) ; $iIDFrom = DllStructGetData ($TINFO," IDFrom") ; $iCode = DllStructGetData ($TINFO, «Code») ; _DebugPrint (\"$NM_SETCURSOR" et CRLF &" - > hwndFrom :\" & TAB & $& hwndFrom CRLF & _ ; » - > IDFrom :\" & TAB & $& iIDFrom CRLF & _ ; » - > Code Promo:" & TAB & $& iCode CRLF & _ ; » - > ItemSpec :\" & TAB & DllStructGetData ($TINFO," ItemSpec") et CRLF & _ ; » - > ItemData :\" & TAB & DllStructGetData ($TINFO," ItemData") et CRLF & _ ;"-> X :\" & TAB DllStructGetData & ($TINFO,"X\") et CRLF & _ ; » - > Y :\" & TAB & DllStructGetData ($TINFO,"Y\") et CRLF & _ ; » - > HitInfo :\" & TAB & DllStructGetData ($TINFO," HitInfo")) ; Retour 0; pour demander au contrôle de gérer le curseur ; Retour 1; non nul pour empêcher le contrôle de gérer le curseur Case $NM_SETFOCUS ; Le contrôle a reçu le focus d'entrée _DebugPrint("$NM_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; Aucune valeur de retour Case $TVN_BEGINDRAGA, $TVN_BEGINDRAGW _DebugPrint("$TVN_BEGINDRAG") Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW _DebugPrint("$TVN_BEGINLABELEDIT") Case $TVN_BEGINRDRAGA, $TVN_BEGINRDRAGW _DebugPrint("$TVN_BEGINRDRAG") Case $TVN_DELETEITEMA, $TVN_DELETEITEMW _DebugPrint("$TVN_DELETEITEM") Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW _DebugPrint("$TVN_ENDLABELEDIT") Case $TVN_GETDISPINFOA, $TVN_GETDISPINFOW _DebugPrint("$TVN_GETDISPINFO") Case $TVN_GETINFOTIPA, $TVN_GETINFOTIPW _DebugPrint("$TVN_GETINFOTIP") Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW _DebugPrint("$TVN_ITEMEXPANDED") Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW _DebugPrint("$TVN_ITEMEXPANDING") Case $TVN_KEYDOWN _DebugPrint("$TVN_KEYDOWN") Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW _DebugPrint("$TVN_SELCHANGED") Case $TVN_SELCHANGINGA, $TVN_SELCHANGINGW _DebugPrint("$TVN_SELCHANGING") Case $TVN_SETDISPINFOA, $TVN_SETDISPINFOW _DebugPrint("$TVN_SETDISPINFO") Case $TVN_SINGLEEXPAND _DebugPrint("$TVN_SINGLEEXPAND") EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func _DebugPrint($s_Text , $sLine = @ScriptLineNumber) ConsoleWrite( _ "!===========================================================" & @CRLF & _ "+======================================================" & @CRLF & _ "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _ "+======================================================" & @CRLF) EndFunc ;==>_DebugPrint