Page 1 sur 1

[R] Récupère valeur d'un item edité d'un treeview

Posté : jeu. 09 oct. 2008 21:38
par ennery
Bonjour,

J'aimerais savoir comment valider par "Entrée" l'édition par click d'un item et ensuite récupérer sa valeur.

Code : Tout sélectionner

#include <GuiConstants.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>

$hGUI = GUICreate("Test GUI", 300, 200)
$hTreeView = _GUICtrlTreeView_Create($hGUI, 10, 10, 280, 180, BitOR($TVS_EDITLABELS, $TVS_INFOTIP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_HASBUTTONS), $WS_EX_CLIENTEDGE)
For $i = 1 To 5
    $hItem = _GUICtrlTreeView_Add($hTreeView, $i, "Item" & $i)
    For $j = 1 To 5
        _GUICtrlTreeView_AddChild($hTreeView, $hItem, "SubItem" & $j)
    Next
Next
GUISetState()
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Re: recupere valeur d'un item edité d'un treeview

Posté : jeu. 09 oct. 2008 21:47
par timmalos
Pour recuperer la valeur, tu trouvera une exemple dans le post sur le visionneur de fichiers, car c'est un programme qui gere un treeview avec l'udf que tu utilise et tu pourra t'en inspirer pour recuperer la valeur.

Re: recupere valeur d'un item edité d'un treeview

Posté : jeu. 09 oct. 2008 23:01
par ennery
merci pour cette réponse approchante.
mon problème est après la validation que j'aimerais récupérer la valeur et non à la sélection.

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 18:54
par timmalos
Tu valide avec un boutton? Si oui il suffit se rajouter une ligne, si non il faut que tu m'explique comment tu procede.

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 18:59
par ennery
slt timmalos

utilise l'exemple joint, click sur un item pour le passer en mode edit
ensuite entre le texte que tu veux, et valide par "entrée".

maintenant tu comprends mon désir.

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 22:06
par timmalos
Voila une solution:
► Afficher le texte

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 22:16
par ennery
merci,

ça progresse, mais on arrive toujours pas a changer le texte de l'item et a le valider avec la touche "Entrée" dans ton exemple, ce qui est au départ ma demande :)

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 22:54
par timmalos
Ah... j'ai du mal a comprendre moi ce soir :)
Dans ton cas l'exemple de _geteditcontrol repond parfaitement a ta demande!

Code : Tout sélectionner

#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiTreeView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

$Debug_TV = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

Global $hTreeView

_Main()

Func _Main()

    Local $hItem[6], $hImage
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
    
    GUICreate("TreeView Get Edit Control", 400, 300)

    $hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    ; turn off unicode at this time dllstruct doesn't support them
    _GUICtrlTreeView_SetUnicodeFormat($hTreeView, False)
    GUISetState()

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 146)
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

    For $x = 0 To _GUIImageList_GetImageCount($hImage) - 1
        $hItem[$x] = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x + 1), $x, $x)
    Next
    
    ; Edit item 0 label
    _GUICtrlTreeView_EditText($hTreeView, $hItem[0])
    Sleep(1000)
    _GUICtrlTreeView_EndEdit($hTreeView)

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>_Main

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $hTreeView
    If Not IsHWnd($hTreeView) Then $hWndTreeview = GUICtrlGetHandle($hTreeView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeview
            Switch $iCode
                Case $NM_CLICK ; The user has clicked the left mouse button within the control
                    _DebugPrint("$NM_CLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
;~                  Return 1 ; nonzero to not allow the default processing
                    Return 0 ; zero to allow the default processing
                Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
                    _DebugPrint("$NM_DBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
;~                  Return 1 ; nonzero to not allow the default processing
                    Return 0 ; zero to allow the default processing
                Case $NM_RCLICK ; The user has clicked the right mouse button within the control
                    _DebugPrint("$NM_RCLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
;~                  Return 1 ; nonzero to not allow the default processing
                    Return 0 ; zero to allow the default processing
                Case $NM_RDBLCLK ; The user has clicked the right mouse button within the control
                    _DebugPrint("$NM_RDBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
;~                  Return 1 ; nonzero to not allow the default processing
                    Return 0 ; zero to allow the default processing
                Case $NM_KILLFOCUS ; control has lost the input focus
                    _DebugPrint("$NM_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; No return value
                Case $NM_RETURN ; control has the input focus and that the user has pressed the key
                    _DebugPrint("$NM_RETURN" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
;~                  Return 1 ; nonzero to not allow the default processing
                    Return 0 ; zero to allow the default processing
;~              Case $NM_SETCURSOR ; control is setting the cursor in response to a WM_SETCURSOR message
;~                  Local $tinfo = DllStructCreate($tagNMMOUSE, $ilParam)
;~                  $hWndFrom = HWnd(DllStructGetData($tinfo, "hWndFrom"))
;~                  $iIDFrom = DllStructGetData($tinfo, "IDFrom")
;~                  $iCode = DllStructGetData($tinfo, "Code")
;~                  _DebugPrint("$NM_SETCURSOR" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
;~                          "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
;~                          "-->Code:" & @TAB & $iCode & @LF & _
;~                          "-->ItemSpec:" & @TAB & DllStructGetData($tinfo, "ItemSpec") & @LF & _
;~                          "-->ItemData:" & @TAB & DllStructGetData($tinfo, "ItemData") & @LF & _
;~                          "-->X:" & @TAB & DllStructGetData($tinfo, "X") & @LF & _
;~                          "-->Y:" & @TAB & DllStructGetData($tinfo, "Y") & @LF & _
;~                          "-->HitInfo:" & @TAB & DllStructGetData($tinfo, "HitInfo"))
;~                  Return 0 ; to enable the control to set the cursor
;~                  Return 1 ; nonzero to prevent the control from setting the cursor
                Case $NM_SETFOCUS ; control has received the input focus
                    _DebugPrint("$NM_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; No return value
                Case $TVN_BEGINDRAG, $TVN_BEGINDRAGW
                    _DebugPrint("$TVN_BEGINDRAG")
                Case $TVN_BEGINLABELEDIT, $TVN_BEGINLABELEDITW
                    _DebugPrint("$TVN_BEGINLABELEDIT")
                    MsgBox(4160, "Information", "Edit Control Handle: " & _GUICtrlTreeView_GetEditControl($hTreeView))
                Case $TVN_BEGINRDRAG, $TVN_BEGINRDRAGW
                    _DebugPrint("$TVN_BEGINRDRAG")
                Case $TVN_DELETEITEM, $TVN_DELETEITEMW
                    _DebugPrint("$TVN_DELETEITEM")
                Case $TVN_ENDLABELEDIT, $TVN_ENDLABELEDITW
                    _DebugPrint("$TVN_ENDLABELEDIT")
                    Local $tInfo = DllStructCreate($tagNMHDR & ";" & $tagTVITEMEX, $ilParam)
                    If DllStructGetData($tInfo, "Text") <> 0 Then
                        Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
                        _GUICtrlTreeView_SetText($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView), DllStructGetData($tBuffer, "Text"))
                    EndIf
                Case $TVN_GETDISPINFO, $TVN_GETDISPINFOW
                    _DebugPrint("$TVN_GETDISPINFO")
                Case $TVN_GETINFOTIP, $TVN_GETINFOTIPW
                    _DebugPrint("$TVN_GETINFOTIP")
                Case $TVN_ITEMEXPANDED, $TVN_ITEMEXPANDEDW
                    _DebugPrint("$TVN_ITEMEXPANDED")
                Case $TVN_ITEMEXPANDING, $TVN_ITEMEXPANDINGW
                    _DebugPrint("$TVN_ITEMEXPANDING")
                Case $TVN_KEYDOWN
                    _DebugPrint("$TVN_KEYDOWN")
                Case $TVN_SELCHANGED, $TVN_SELCHANGEDW
                    _DebugPrint("$TVN_SELCHANGED")
                Case $TVN_SELCHANGING, $TVN_SELCHANGINGW
                    _DebugPrint("$TVN_SELCHANGING")
                Case $TVN_SETDISPINFO, $TVN_SETDISPINFOW
                    _DebugPrint("$TVN_SETDISPINFO")
                Case $TVN_SINGLEEXPAND
                    _DebugPrint("$TVN_SINGLEEXPAND")
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @LF & _
            "+======================================================" & @LF & _
            "-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
            "+======================================================" & @LF)
EndFunc   ;==>_DebugPrint

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : ven. 10 oct. 2008 23:04
par ennery
sauf que geteditcontrol ne peut pas valider par "entrée" l'edit
ennery a écrit :Bonjour,

J'aimerais savoir comment valider par "Entrée" l'édition par click d'un item et ensuite récupérer sa valeur

Re: [..] Récupère valeur d'un item edité d'un treeview

Posté : dim. 12 oct. 2008 09:47
par ennery
Après avoir longuement parcouru le site US, Voici un résultat qui fonctionne.
Peut-être y a t-il mieux.

Code : Tout sélectionner

#include <GuiConstants.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
Global $hTreeView, $bTreeEdit = False
$hGUI = GUICreate("Test GUI", 300, 200)
$hTreeView = _GUICtrlTreeView_Create($hGUI, 10, 10, 280, 180, BitOR($TVS_EDITLABELS, $TVS_INFOTIP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_HASBUTTONS), $WS_EX_CLIENTEDGE)
For $i = 1 To 5
    $hItem = _GUICtrlTreeView_Add($hTreeView, $i, "Item" & $i)
    For $j = 1 To 5
        _GUICtrlTreeView_AddChild($hTreeView, $hItem, "SubItem" & $j)
    Next
Next
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
While 1
    TreeKeyboardFunc($hTreeView)
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Func KeyPressed($iHexKey)
    Local $aRet = DllCall('user32.dll', "int", "GetAsyncKeyState", "int", $iHexKey)
    If BitAND($aRet[0], 1) Then Return 1
    Return 0
EndFunc   ;==>KeyPressed
Func TreeKeyboardFunc($cID)
    Local $hWnd = GUICtrlGetHandle($cID)
    If $bTreeEdit Then
        If KeyPressed(0x0d) Then
            _GUICtrlTreeView_EndEdit($cID)
            MsgBox(0,"", _GUICtrlTreeView_GetText($cID, _GUICtrlTreeView_GetSelection($hTreeView)))
        EndIf
    EndIf

EndFunc   ;==>TreeKeyboardFunc
Func WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
    Local $tNMHDR = DllStructCreate("hwnd hTree;uint;int code", $lParam)
    Local $code = DllStructGetData($tNMHDR, "code")
    Local $hTree = HWnd(DllStructGetData($tNMHDR, "hTree"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    Switch $code
        Case $TVN_BEGINLABELEDIT, $TVN_BEGINLABELEDITW
            $bTreeEdit = True
        Case $TVN_ENDLABELEDIT, $TVN_ENDLABELEDITW
            $bTreeEdit = False
                Return 1
    EndSwitch
EndFunc   ;==>WM_NOTIFY
Donc je considère ma demande Résolue. :)