#include <GuiEdit.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ; Включает режим OnEvent
Global $hGUI = GUICreate("Привет мир", 400, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
Global $hEdit = GUICtrlCreateEdit("Привет мир! Как дела?", 5, 5, 390, 100)
Global $okbutton = GUICtrlCreateButton("OK", 180, 120, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
Sleep(1000) ; Цикл ожидания
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
$hWndFrom = $ilParam
$iIDFrom = _WinAPI_LoWord($iwParam)
$iCode = _WinAPI_HiWord($iwParam)
Switch $hWndFrom
Case $hEdit, $hWndEdit
Switch $iCode
Case $EN_ALIGN_LTR_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние слева-направо
_DebugPrint("$EN_ALIGN_LTR_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_ALIGN_RTL_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние справа-налево
_DebugPrint("$EN_ALIGN_RTL_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_CHANGE ; Высылается, когда пользователь выполнил действие, которое может изменить текст в окне редактирования
_DebugPrint("$EN_CHANGE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_ERRSPACE ; Высылается, когда окно редактирования не может выделить достаточно памяти для выполнения определённого запроса
_DebugPrint("$EN_ERRSPACE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_HSCROLL ; Высылается, когда пользователь кликает горизонтальную прокрутку в окне редактирования
_DebugPrint("$EN_HSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_KILLFOCUS ; Высылается, когда окно редактирования теряет фокус
_DebugPrint("$EN_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_MAXTEXT ; Высылается, когда текущий вставляемый текст превысил указанное число символов для окна редактирования
_DebugPrint("$EN_MAXTEXT" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOHSCROLL и количество символов, которое будет вставлено превысит ширину окна редактирования.
; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOVSCROLL и общее количество строк в результате вставки текста будет превышать высоту окна редактирования.
; Нет возвращаемых значений
Case $EN_SETFOCUS ; Высылается, когда окно редактирования получает фокус
_DebugPrint("$EN_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_UPDATE ; Высылается, когда окно редактирования собирается перерисовать себя
_DebugPrint("$EN_UPDATE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
Case $EN_VSCROLL ; Высылается, когда пользователь кликает вертикальную прокрутку в окне редактирования или прокручивает её колесом мыши
_DebugPrint("$EN_VSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; Нет возвращаемых значений
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"-->Строка(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
Func OKButton()
;Примечание: в этом месте @GUI_CtrlId равен $okbutton,
MsgBox(0, "GUI Event", "Вы нажали OK!")
EndFunc
Func CLOSEClicked()
;Примечание: в этом месте @GUI_CtrlId равен $GUI_EVENT_CLOSE,
;@GUI_WinHandle может быть либо $mainwindow, либо $dummywindow
If @GUI_WinHandle = $hGUI Then
MsgBox(0, "GUI Event", "Вы нажали CLOSE в основном окне! Завершаем...")
Exit
EndIf
EndFunc