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

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Tlem le dim. 12 oct. 2008 22:48, modifié 2 fois.
Raison : Ajout de la balise [..] dans le titre et de la majuscule
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message 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.
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#4

Message 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.
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#5

Message 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.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#6

Message par timmalos »

Voila une solution:
► Afficher le texte
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#7

Message 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 :)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#8

Message 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
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#9

Message 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
ennery
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mar. 05 févr. 2008 14:19
Status : Hors ligne

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

#10

Message 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. :)
Répondre