Что нового

[Элементы GUI] Двойной клик по TreeView...

DeadBoy

Новичок
Сообщения
6
Репутация
0
Друзья, сори если было...

Есть код, который банально создает TreeView, в нем один главный элемент а в нем три дочерних. Как отследить двойной клик по любому из элементов? Если можно, подробно комментируйте код...

P.S. Свой код выкладывать не буду, три строки буквально)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
DeadBoy,
Посмотрите в справке пример к функции _GUICtrlTreeView_Create(), а в нем функцию WM_NOTIFY(). Вам нужно отслеживать $NM_DBLCLK.
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Посмотрел, а нет вариантов проще?
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Печально, но ничего не понятно(
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Вообщем) Код из справки отрезал вот до этого) Теперь хочу чтобы при двойном клике в MsgBox выползало название элемента по которому кликнули...

Код:
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

Global $hTreeView

    Local $GUI, $hItem
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
    $GUI = GUICreate("TreeView", 400, 300)
    $hTreeView = _GUICtrlTreeView_Create($GUI, 2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    GUISetState()

    _GUICtrlTreeView_BeginUpdate($hTreeView)
        $hItem = _GUICtrlTreeView_Add($hTreeView, 0, "New_Item")
            _GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child")
			_GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child_2")
			_GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child_3")
    _GUICtrlTreeView_EndUpdate($hTreeView)

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

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_DBLCLK
					MsgBox(64, ":)", $text)
                    Return 0
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Да, спрошу еще раз, неужели двойной клик по другому не отследить? Или переписать под While 1/WEnd

P.S. Сори, я чайник... :laugh:

И не пойму, какая разница:

Код:
_GUICtrlTreeView_Add
и
Код:
GUICtrlCreateTreeViewItem
:scratch:
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
И неужели так обязательно использовать:
Код:
_GUICtrlTreeView_AddChild
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
DeadBoy

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
(подробнее), а обычный код соответственно в тег [code]
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Так что, никто не поможет? Хоть скажите куда копать? :(
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
DeadBoy [?]
Так что, никто не поможет? Хоть скажите куда копать?
Код:
#include <WinAPI.au3>

;...........................
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_DBLCLK
                    $hItem=__TV_GetItemHandle($hWndFrom)
					$sText=_GUICtrlTreeView_GetText($hWndFrom, $hItem)
					MsgBox(64, "", $sText)
                    Return 0
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
	
Func __TV_GetItemHandle($hTV)
  $tPoint = _WinAPI_GetMousePos(1, $hTV)
  $tTVHTI = _GUICtrlTreeView_HitTestEx($hTV, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
  $hItem = DllStructGetData($tTVHTI, 'Item')
  Return $hItem
EndFunc
 
Верх