Что нового

[Элементы GUI] GUICtrlCreateInput - возможно ли создать маску ввода?

Mark

Новичок
Сообщения
22
Репутация
1
Доброго вечера.
Столкнулся с необходимостью создания маски ввода.
Конкретно интересует такой формат:
Только числа, 9 знаков + хотелось бы после нажатия клавиши Enter в поле Input запускать обработку, сейчас это делает отдельным Button'ом.

Может, кто подскажет, чего-нить на тему :smile:

=====
$ES_NUMBER - я, конечно, нашел... но вот с остальным пока сложно...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
http://autoit-script.ru/index.php?topic=852.msg5981#msg5981

Думаю не сложно будет проверить маску через RegExp? :whistle:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Mark
Еще я нашел код Yashied http://forum.oszone.net/post-1124334-3.html
Код:
#Include <GUIConstants.au3>
#Include <EditConstants.au3>
#Include <WindowsConstants.au3>

GUICreate("MyGUI", 300, 50)
$Input = GUICtrlCreateInput("", 15, 15, 270, 19)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch BitAND($wParam, 0xFFFF)
        Case $Input
            Switch BitShift($wParam, 16)
                Case $EN_CHANGE

                    Local $Data = GUICtrlRead($Input)

                    ; Здесь можно проанализировать строку, и отредактировать ее при необходимости
                    $Data = StringRegExpReplace($Data, "[^0-9]", "")
					If StringLen($Data) > 9 Then
						$Data = StringLeft($Data, 9)
					EndIf
                    GUICtrlSetData($Input, $Data)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
 
Автор
M

Mark

Новичок
Сообщения
22
Репутация
1
Спасибо, то что надо.
Осталось узнать как отловить нажатие Enter'a в Input'e и можно спать спокойно :D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
madmasles [?]
Еще я нашел код Yashied
Для лимита длины вводимых символов можно использовать GUICtrlSetLimit.

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

$hGUI = GUICreate("MyGUI", 300, 50)

$nDummyCtrl = GUICtrlCreateDummy()

$Input = GUICtrlCreateInput("", 15, 15, 270, 19, $ES_NUMBER)
GUICtrlSetLimit(-1, 9)

GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetState()

Dim $AccelKeys[1][2] = [["{ENTER}", $nDummyCtrl]]
GUISetAccelerators($AccelKeys)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nDummyCtrl
			If ControlGetHandle($hGUI, '', $Input) <> ControlGetHandle($hGUI, '', ControlGetFocus($hGUI)) Then ContinueLoop

			;Тут запуск обработки
			;_InputHandler()
     EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
	Switch BitAND($wParam, 0xFFFF)
		Case $Input
			Switch BitShift($wParam, 16)
				Case $EN_CHANGE, $EN_UPDATE
					Local $Data = StringRegExpReplace(GUICtrlRead($Input), "[^0-9]", "")
					GUICtrlSetData($Input, $Data)
			EndSwitch
	EndSwitch
		
	Return $GUI_RUNDEFMSG
EndFunc
 
Автор
M

Mark

Новичок
Сообщения
22
Репутация
1
спасибо, за оперативность, выручили :beer: :IL_AutoIt_1:
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
А все из-за незнания английского :smile:
Код:
Dim $AccelKeys[1][2] = [["{ENTER}", $nDummyCtrl]]
GUISetAccelerators($AccelKeys)

я всегда пользовался либо хоткеем, либо
Код:
#Include <Misc.au3>
_IsPressed($s_hexKey[, $v_dll = 'user32.dll'])
 
Верх