Page 1 sur 1
[R] Clic droit sur un TreeViewItem
Posté : ven. 15 oct. 2010 15:03
par TommyDDR
Bonjour,
lorsque je fais un clic droit sur un TreeViewItem le focus va sur celui-ci le temps du click et reviens sur l'ancien item une fois le clic fini.
J'aimerais savoir s'il est possible qu'un clic droit serve aussi de sélection définitive d'un TreeViewItem. (Comme sur un ListViewItem, un clic droit sélectionne définitivement l'item)
► Afficher le texteCode pour tester
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $ItemTree[20]
Dim $ItemList[6]
$Gui = GUICreate("test", 300, 300)
$ItemTree[0] = GUICtrlCreateTreeView(10, 10, 280, 135)
For $i = 1 To 19
$ItemTree[$i] = GUICtrlCreateTreeViewItem(Random(0, 1000, 1), $ItemTree[Random(0, $i-1, 1)])
Next
$ItemList[0] = GUICtrlCreateListView("Num1|Num2|Num3", 10, 155, 280, 135)
For $i = 1 To 5
$ItemList[$i] = GUICtrlCreateListViewItem(Random(0, 100, 1) & "|" & Random(0, 100, 1) & "|" & Random(0, 100, 1), $ItemList[0])
Next
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
While(True)
Sleep(10)
WEnd
Func quit()
Exit
EndFunc
Essayez un clic droit sur un des item, le focus reviendra à sa place une fois le clic fini dans le TreeView alors qu'un clic droit sur un des item sur la ListView sélectionnera définitivement l item.
Merci.
Re: [..] Clic droit sur un TreeViewItem
Posté : sam. 16 oct. 2010 21:42
par Tlem
C'est à vous d'appliquer le comportement de la sélection.
Vous devez détecter le clic de droite sur un item, puis récupérer l'indexe de cet item et enfin le sélectionner par la fonction qu'il convient.
Re: [..] Clic droit sur un TreeViewItem
Posté : mar. 19 oct. 2010 13:53
par TommyDDR
Désolé pour la réponse tardive.
J'avais déjà détecter le clic droit sur l item et affiché celui ci, cependant, même pendant le clic droit (malgré que l item soit bleuté) l item selectionné reste l'ancien.
► Afficher le textecode
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $ItemTree[20]
Dim $ItemList[6]
$Gui = GUICreate("test", 300, 300)
$ItemTree[0] = GUICtrlCreateTreeView(10, 10, 280, 135)
For $i = 1 To 19
$ItemTree[$i] = GUICtrlCreateTreeViewItem(Random(0, 1000, 1), $ItemTree[Random(0, $i-1, 1)])
Next
$ItemList[0] = GUICtrlCreateListView("Num1|Num2|Num3", 10, 155, 280, 135)
For $i = 1 To 5
$ItemList[$i] = GUICtrlCreateListViewItem(Random(0, 100, 1) & "|" & Random(0, 100, 1) & "|" & Random(0, 100, 1), $ItemList[0])
Next
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "Notification")
While(True)
Sleep(10)
WEnd
Func quit()
Exit
EndFunc
Func Notification($hWnd, $iMsg, $wParam, $lParam)
Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
If(Not(@error)) Then
If(DllStructGetData($tNMHDR, 1) = GUICtrlGetHandle($ItemTree[0])) Then
If(DllStructGetData($tNMHDR, 3) = $NM_RCLICK) Then
MsgBox(0, "", GUICtrlRead(GUICtrlRead($ItemTree[0]), 1))
EndIf
EndIf
$tNMHDR = 0
EndIf
EndFunc
Votre aide me serait précieuse :$
Merci.
Re: [..] Clic droit sur un TreeViewItem
Posté : mar. 19 oct. 2010 23:02
par Tlem
C'est votre fonction
Notification(), qui est un peut trop light ...
Voici un code modifié pour être fonctionnel avec le début de votre code.
Source :
http://www.autoitscript.com/forum/index ... t&p=561217
Cela dit, vous trouverez matière à réflexion dans la fonction
WM_NOTIFY des exemples de la documentation concernant les fonctions des TreeView et des ListView.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $ItemTree[20]
Dim $ItemList[6]
$Gui = GUICreate("test", 300, 300)
$ItemTree[0] = GUICtrlCreateTreeView(10, 10, 280, 135)
For $i = 1 To 19
$ItemTree[$i] = GUICtrlCreateTreeViewItem(Random(0, 1000, 1), $ItemTree[Random(0, $i - 1, 1)])
Next
$ItemList[0] = GUICtrlCreateListView("Num1|Num2|Num3", 10, 155, 280, 135)
For $i = 1 To 5
$ItemList[$i] = GUICtrlCreateListViewItem(Random(0, 100, 1) & "|" & Random(0, 100, 1) & "|" & Random(0, 100, 1), $ItemList[0])
Next
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While (True)
Sleep(10)
WEnd
Func quit()
Exit
EndFunc ;==>quit
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
$hWndTreeview = $ItemTree[0]
$hWndListView = $ItemList[0]
If Not IsHWnd($ItemTree[0]) Then $hWndTreeview = GUICtrlGetHandle($ItemTree[0])
If Not IsHWnd($ItemList[0]) Then $hWndListView = GUICtrlGetHandle($ItemList[0])
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTreeview
Local $tPoint, $tTVHEx, $TVhItem, $mX, $mY
$tPoint = _WinAPI_GetMousePos(True, $hWndTreeview)
$mX = DllStructGetData($tPoint, "X")
$mY = DllStructGetData($tPoint, "Y")
$tTVHEx = _GUICtrlTreeView_HitTestEx($hWndTreeview, $mX, $mY)
$TVhItem = DllStructGetData($tTVHEx, "Item")
If $TVhItem = 0x00000000 Then Return 0
Switch $iCode
Case $NM_CLICK
ConsoleWrite("Clic Gauche sur " & _GUICtrlTreeView_GetText($hWndTreeview, $TVhItem) & @LF)
Case $NM_RCLICK
ConsoleWrite("Clic Droit sur " & _GUICtrlTreeView_GetText($hWndTreeview, $TVhItem) & @LF)
EndSwitch
Return 0
Case $hWndListView
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $Index = DllStructGetData($tInfo, "Index")
If $Index = -1 Then Return 0
Switch $iCode
Case $NM_CLICK
ConsoleWrite("Clic Gauche sur la ligne d'index " & $Index & @LF)
Case $NM_RCLICK
ConsoleWrite("Clic Droit sur la ligne d'index " & $Index & @LF)
EndSwitch
Return 0
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
J'ai fait la gestion du clic droit et du clic gauche pour les deux éléments (TreeView et ListView).
Il y à surement moyen de filtrer aussi la détection du clic de l'élément + ou - à la gauche des éléments du TreeView, mais je vous laisse chercher.

Re: [..] Clic droit sur un TreeViewItem
Posté : mer. 20 oct. 2010 00:10
par TommyDDR
Que dire... Merci Tuxolem Tlem !!!
Vous êtes la bible d'autoit en personne.
Votre code m'a fort bien aidé.
Résolu.
Re: [..] Clic droit sur un TreeViewItem
Posté : mer. 20 oct. 2010 00:37
par Tlem
Mon pseudo sur le forum c'est Tlem.
Mon prénom c'est Thierry.
Tuxolem correspond à bien autre chose.
PS: N'oubliez pas la balise [R]
dans le titre de votre premier message si votre sujet est résolu.
Re: [R] Clic droit sur un TreeViewItem
Posté : mer. 20 oct. 2010 10:38
par TommyDDR
Désolé pour le pseudo ^^
Et pour la balise [R] je voulais la mettre mais ma connexion m'a lâchée hier soir lors de l'édition du post ^^'.