Что нового

Не захватывает значение поле input при печати в Switch Case

mxmod

Новичок
Сообщения
8
Репутация
0
Здравствуйте, не могу сделать так, чтобы каждый раз при печати в поле input в консоли выводилось его значение. Подскажите, пожалуйста, как правильно сделать.
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>


Global $hGUI = GUICreate("Example", 200, 200)
Global $hInput1 = GUICtrlCreateInput("", 5, 5, 190, 20)
Global $hInput2 = GUICtrlCreateInput("", 30, 30, 190, 20)
GUISetState(@SW_SHOW, $hGUI)


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hInput1
            $sReadInput1= GUICtrlRead($hInput1)
            consoleWrite($sReadInput1)
        Case $hInput2
            $sReadInput2= GUICtrlRead($hInput2)
            consoleWrite($sReadInput2)
    EndSwitch
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Применительно к Input, функция GUIGetMsg "срабатывает" при потере фокуса этим контролом. Чтобы получать текст Input непосредственно при вводе, нужно обрабатывать сообщения $EN_UPDATE и/или $EN_CHANGE.
 
Автор
M

mxmod

Новичок
Сообщения
8
Репутация
0
Применительно к Input, функция GUIGetMsg "срабатывает" при потере фокуса этим контролом. Чтобы получать текст Input непосредственно при вводе, нужно обрабатывать сообщения $EN_UPDATE и/или $EN_CHANGE.
Нашёл пример и переделал немного под себя, где разрешено вводить только цифры и дефис. Но почему-то программа работает только с одним GUIRegisterMsg. Если делаю таких две, то работает только последняя функция. Как заставить работать обе?

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

Global $hGUI = GUICreate("Example", 200, 200)
Global $hInput1 = GUICtrlCreateInput("", 5, 5, 190, 20)
Global $hInput2 = GUICtrlCreateInput("", 30, 30, 190, 20)
GUISetState(@SW_SHOW, $hGUI)

GUIRegisterMsg($WM_COMMAND, 'CHECK_SIMBOLS_CODE')
GUIRegisterMsg($WM_COMMAND, 'CHECK_SIMBOLS_PAYMENT')

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func CHECK_SIMBOLS_CODE($hWnd, $imsg, $iwParam, $ilParam)
    Local $nNotifyCode, $nID, $replace, $iInput
    $nNotifyCode=BitShift($iwParam, 16)
    $nID=BitAND($iwParam, 0xFFFF)
    Switch $hWnd
    Case $hGUI
        Switch $nID
        Case $hInput1
            Switch $nNotifyCode
            Case $EN_CHANGE
                $iInput=GUICtrlRead($hInput1)
                $replace=StringRegExpReplace($iInput, "((?<=\-)\.|[^\d\-]|\A\-\z)", "")
                GUICtrlSetData($hInput1, $replace)
                consoleWrite("1!")
            EndSwitch
        EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Func CHECK_SIMBOLS_PAYMENT($hWnd, $imsg, $iwParam, $ilParam)
    Local $nNotifyCode, $nID, $replace, $iInput
    $nNotifyCode=BitShift($iwParam, 16)
    $nID=BitAND($iwParam, 0xFFFF)
    Switch $hWnd
    Case $hGUI
        Switch $nID
        Case $hInput2
            Switch $nNotifyCode
            Case $EN_CHANGE
                $iInput=GUICtrlRead($hInput2)
                $replace=StringRegExpReplace($iInput, "((?<=\-)\.|[^\d\-]|\A\-\z)", "")
                GUICtrlSetData($hInput2, $replace)
                consoleWrite("2!")
            EndSwitch
        EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Для $WM_COMMAND может быть только один обработчик (последний зарегистрированный).
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $hGUI = GUICreate("Example", 200, 200)
Global $hInput1 = GUICtrlCreateInput("", 5, 5, 190, 20)
Global $hInput2 = GUICtrlCreateInput("", 30, 30, 190, 20)
GUISetState(@SW_SHOW, $hGUI)

GUIRegisterMsg($WM_COMMAND, 'CHECK_SIMBOLS_CODE')

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func CHECK_SIMBOLS_CODE($hWnd, $imsg, $iwParam, $ilParam)
    Local $nNotifyCode, $nID, $replace, $iInput
    $nNotifyCode=BitShift($iwParam, 16)
    $nID=BitAND($iwParam, 0xFFFF)
    Switch $hWnd
    Case $hGUI
        Switch $nID
        Case $hInput1, $hInput2
            Switch $nNotifyCode
            Case $EN_CHANGE
                $iInput=GUICtrlRead($nID)
                $replace=StringRegExpReplace($iInput, "((?<=\-)\.|[^\d\-]|\A\-\z)", "")
                GUICtrlSetData($nID, $replace)
                consoleWrite("!")
            EndSwitch
        EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
 
Верх