Что нового

Не срабатывает событие $NM_RETURN

Norm

Знающий
Сообщения
105
Репутация
12
Уважаемые мастера подскажите пожалуйста, почему не в одном из примеров из справки не работает событие $NM_RETURN
Хотел это использовать, чтобы не создавать HotKey и не навешивать акселератор на клавишу Enter.
 

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
Все примеры в справке рабочие. Приведите пример
 
Автор
N

Norm

Знающий
Сообщения
105
Репутация
12
Любой пример, если в поиск справки забить $NM_RETURN
Если у Вас это работает, то почему у меня конкретно это событие не проходит?
Быть может я это не правильно понимаю, ноя исхожу из того что там в комментарии написано:
Код:
$NM_RETURN ; Элемент имеет фокус ввода и пользователь нажал клавишу ENTER

Фокус находится на редактируемом элементе,
Нажимаю ENTER, но ConsoleWrite не показывает это событие, хотя все другие события отрабатываются нормально.
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
сразу не понял. да, это давняя проблема
решение через "костыль"
есть в указанной теме, приведу здесь
Код:
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Constants.au3>

Global Const $VK_RETURN = 0x0D ;Enter key

$hGUI = GUICreate("Test GUI", 300, 200)

$hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems", 10, 10, 280, 180)

For $i = 1 To 10
    _GUICtrlListView_AddItem($hListView, "Item " & $i)
Next

GUISetState()

$wProcHandle = DllCallbackRegister("_WindowProc", "int", "hwnd;uint;wparam;lparam")
$wProcOld = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle))

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $wProcOld)
DllCallbackFree($wProcHandle)
GUIDelete($hGui)

Func _WindowProc($hWnd, $Msg, $wParam, $lParam)
    Switch $hWnd
        Case $hListView
            Switch $Msg
                Case $WM_GETDLGCODE
                    Switch $wParam
                        Case $VK_RETURN
                            ConsoleWrite("Enter key is pressed" & @LF)
                            Return 0
                    EndSwitch
            EndSwitch
    EndSwitch

    Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
EndFunc
 
  • Like
Реакции: Norm
Автор
N

Norm

Знающий
Сообщения
105
Репутация
12
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
какая версия языка? у меня отрабатывает на 3.3.12.0 и на бета 3.3.15.0
 
Автор
N

Norm

Знающий
Сообщения
105
Репутация
12
какая версия языка? у меня отрабатывает на 3.3.12.0 и на бета 3.3.15.0
3.3.14.5

Код:
$wProcOld = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"..\Desktop\TestFolder\TEST.1.au3"(41,75) : error: _WinAPI_CallWindowProc(): undefined function.

    Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
WinApi au3
 
  • Like
Реакции: Norm
Верх