после редактирования нужно обновлять элемент
Т.е. функция _GUICtrlTreeView_EndEdit работает правильно?В примере _GUICtrlTreeView_Create есть уведомления $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW, $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW, видиимо по этим событиям нужно "вручную" применить текст.
Я думаю да. Её предназначение это отправлять событие что редактирование завершено, но не собственно само редактирование. На счёт параметра Cancel, он просто отвечает за отмену отправки события, скорее всего в справке следует это упомянуть.Т.е. функция _GUICtrlTreeView_EndEdit работает правильно?
Её предназначение это отправлять событие что редактирование завершено, но не собственно само редактирование.
_GUICtrlTreeView_SetText устанавливает текст, то есть он уже должен существовать, например создать дополнительное поле ввода и кнопку.При таких раскладах функции _GUICtrlTreeView_EditText и _GUICtrlTreeView_EndEdit теряют смысл (во всяком случае, я не могу придумать как их можно применять практически) и легко заменяются функцией _GUICtrlTreeView_SetText
Да, и пример сделать полный.скорее всего в справке следует это упомянуть
Тогда пример к этой функции в справке (и само описание функции) практически не дает представления о работе этой функции (ну, кроме того, что уничтожается элемент Edit).Функция_GUICtrlTreeView_EndEdit() нужна для уничтожения Edit элемента и отправки TVN_ENDLABELEDIT. Никакого автоматического переименования элемента не будет. Вы должны отлавливать TVN_ENDLABELEDIT
Global Const $TVN_SELCHANGED = $TVN_SELCHANGEDA
Global Const $TVN_ENDLABELEDIT = $TVN_ENDLABELEDITA
Global Const $TVN_ITEMEXPANDING = $TVN_ITEMEXPANDINGA
Global Const $TVN_BEGINLABELEDIT = $TVN_BEGINLABELEDITA
Global Const $TVN_BEGINDRAG = $TVN_BEGINDRAGA
Пример:я не могу придумать как их можно применять практически
#include <GUIConstantsEx.au3>
#include <GUITreeView.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("TreeView Edit Text", 400, 300)
$iTreeView = GUICtrlCreateTreeView(10, 10, 380, 240, BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP), $WS_EX_CLIENTEDGE)
For $i = 1 To 10
GUICtrlCreateTreeViewItem('Item ' & $i, $iTreeView)
Next
$iRename_Bttn = GUICtrlCreateButton('Rename', 10, 270, 60, 20)
$iESC_Dummy = GUICtrlCreateDummy()
$iEnter_Dummy = GUICtrlCreateDummy()
Dim $aAccelKeys[2][2] = [['{ESC}', $iESC_Dummy], ['{ENTER}', $iEnter_Dummy]]
GUISetAccelerators($aAccelKeys)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW, $hGUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $iRename_Bttn
$hItem = _GUICtrlTreeView_GetSelection($iTreeView)
_GUICtrlTreeView_EditText($iTreeView, $hItem)
Case $iESC_Dummy
_GUICtrlTreeView_EndEdit($iTreeView, True)
Case $iEnter_Dummy
_GUICtrlTreeView_EndEdit($iTreeView, False)
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
$hWndTreeview = $iTreeView
If Not IsHWnd($iTreeView) Then $hWndTreeview = GUICtrlGetHandle($iTreeView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTreeview
Switch $iCode
Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
Local $tInfo = DllStructCreate($tagNMHDR & ";" & $tagTVITEMEX, $ilParam)
If DllStructGetData($tInfo, "Text") <> 0 Then
Local $tBuffer = DllStructCreate("wchar Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
_GUICtrlTreeView_SetText($hWndTreeview, _GUICtrlTreeView_GetSelection($hWndTreeview), DllStructGetData($tBuffer, "Text"))
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
#include <GUIConstantsEx.au3>
#include <GUITreeView.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("TreeView Edit Text", 400, 300)
$iTreeView = GUICtrlCreateTreeView(10, 10, 380, 240, BitOR($TVS_EDITLABELS, $TVS_DISABLEDRAGDROP), $WS_EX_CLIENTEDGE)
For $i = 1 To 10
GUICtrlCreateTreeViewItem('Item ' & $i, $iTreeView)
Next
$iRename_Bttn = GUICtrlCreateButton('Rename', 10, 270, 60, 20)
$iESC_Dummy = GUICtrlCreateDummy()
$iEnter_Dummy = GUICtrlCreateDummy()
Dim $aAccelKeys[2][2] = [['{ESC}', $iESC_Dummy], ['{ENTER}', $iEnter_Dummy]]
GUISetAccelerators($aAccelKeys)
GUISetState(@SW_SHOW, $hGUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $iRename_Bttn
$hItem = _GUICtrlTreeView_GetSelection($iTreeView)
_GUICtrlTreeView_EditText($iTreeView, $hItem)
Case $iESC_Dummy
_GUICtrlTreeView_EndEdit($iTreeView, True)
Case $iEnter_Dummy
$hItem = _GUICtrlTreeView_GetSelection($iTreeView)
$hEdit = _GUICtrlTreeView_GetEditControl($iTreeView)
_GUICtrlTreeView_SetText($iTreeView, $hItem, ControlGetText($hGUI, '', $hEdit))
_GUICtrlTreeView_EndEdit($iTreeView, False)
EndSwitch
WEnd
Гораздо более подходящий пример для справки, чем тот, который сейчас там воткнут.Пример: