Что нового

Как в поле GUICtrlCreateInput дождаться {ENTER} и выдать в каком поле нажали ?

kaslit

Чайник
Сообщения
5
Репутация
0
Autoit последний: autoit-v3-setup3.3.12.0

Есть три поля GUICtrlCreateInput.
надо дождаться значение, которое заканчивается {ENTER} / @CRLF / 0D
и вывести окно в каком поле нажали...

Заранее спасибо!
 

Вложения

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

kaslit,
Можно примерно так попробовать сделать.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $hGUI, $idEdit, $idBtn, $idDummy, $iCountLines

GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
$hGUI = GUICreate('Edit', 200, 200)
$idEdit = GUICtrlCreateEdit('', 20, 20, 160, 100)
$idBtn = GUICtrlCreateButton('Test', 50, 145, 100, 30)
$idDummy = GUICtrlCreateDummy()
GUISetState()
$iCountLines = GUICtrlSendMsg($idEdit, $EM_GETLINECOUNT, 0, 0)
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtn
			MsgBox(64, 'Info', 'Btn click', 0, $hGUI)
		Case $idDummy
			MsgBox(64, 'Info', 'You send Enter in Edit', 0, $hGUI)
	EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	Switch BitAND($iwParam, 0xFFFF)
		Case $idEdit
			Switch BitShift($iwParam, 16)
				Case $EN_CHANGE
					Local $i_Count = GUICtrlSendMsg($idEdit, $EM_GETLINECOUNT, 0, 0)
					Select
						Case $i_Count > $iCountLines
							$iCountLines = $i_Count
							GUICtrlSendToDummy($idDummy)
						Case $i_Count < $iCountLines
							$iCountLines = $i_Count
					EndSelect
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
 
Автор
K

kaslit

Чайник
Сообщения
5
Репутация
0
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

Работает! Спасибо!
Но такая-же тема не проходит с GUICtrlCreateInput.
Там не хочет определять...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

kaslit [?]
Но такая-же тема не проходит с GUICtrlCreateInput
А так?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $hGUI, $idInput, $idBtn, $idDummy, $iFocusInput, $aAccelKeys[1][2] = [['{Enter}']]

GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
$hGUI = GUICreate('Input', 200, 200)
$idInput = GUICtrlCreateInput('', 20, 20, 160, 100)
$idBtn = GUICtrlCreateButton('Test', 50, 140, 100, 30)
$idDummy = GUICtrlCreateDummy()
$aAccelKeys[0][1] = $idDummy
GUISetAccelerators($aAccelKeys)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtn
			MsgBox(64, 'Info', 'Btn', 0, $hGUI)
		Case $idDummy
			If Not $iFocusInput Then ContinueLoop
			MsgBox(64, 'Info', 'You send Enter in Input', 0, $hGUI)
	EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	Switch BitAND($iwParam, 0xFFFF)
		Case $idInput
			Switch BitShift($iwParam, 16)
				Case $EN_SETFOCUS
					$iFocusInput = 1
				Case $EN_KILLFOCUS
					$iFocusInput = 0
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
 
Автор
K

kaslit

Чайник
Сообщения
5
Репутация
0
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

Вы просто чудо! Да. всё как надо!

Мне кстати кажется, что в профиле надо добавить ещё ссылку на кошелёк. Так, на всякий случай ;)
 

joiner

Модератор
Локальный модератор
Сообщения
3 013
Репутация
502
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

kaslit [?]
Но такая-же тема не проходит с GUICtrlCreateInput.
а как так может быть если WM_COMMAND отслеживает только
Код:
Case $idEdit

контрол Edit?
 
Автор
K

kaslit

Чайник
Сообщения
5
Репутация
0
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

а вот как поступить в случае с тремя InputBox ?
 

Вложения

joiner

Модератор
Локальный модератор
Сообщения
3 013
Репутация
502
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

kaslit [?]
а вот как поступить в случае с тремя InputBox ?
madmasles показал как на примере одного. думай
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: Как в поле EDIT дождаться {ENTER} / @CRLF / 0D и вывести окноо том что нажали ?

kaslit [?]
как поступить в случае с тремя InputBox
[info border=#0000ff float=left]С такой постановкой вопроса Вам надо в Стол заказов.
Переоформите тему в соответствии с Правилами обязательного оформления тем в разделе "Стол заказов" и я ее туда перенесу.[/info]
Наверное, как-то так.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $hGUI, $a_idInput[4], $idBtn, $idDummy, $aAccelKeys[1][2] = [['{Enter}']]

GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
$hGUI = GUICreate('InputData', 400, 260)
For $i = 1 To 3
	$a_idInput[$i] = GUICtrlCreateInput($i & '_String', 100, 120 + ($i - 1) * 30, 260, 30)
Next
$idBtn = GUICtrlCreateButton('Test', 40, 230, 60, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$idDummy = GUICtrlCreateDummy()
$aAccelKeys[0][1] = $idDummy
GUISetAccelerators($aAccelKeys)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtn
			MsgBox(64, 'Info', 'Btn', 0, $hGUI)
		Case $idDummy
			If Not $a_idInput[0] Then ContinueLoop
			MsgBox(64, 'Info', 'You send Enter in Input with ID = ' & $a_idInput[0] & @LF & 'and with text = "' & _
					GUICtrlRead($a_idInput[0]) & '"', 0, $hGUI)
	EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	Switch BitShift($iwParam, 16)
		Case $EN_KILLFOCUS
			$a_idInput[0] = 0
		Case $EN_SETFOCUS
			Local $i_ID = BitAND($iwParam, 0xFFFF)
			For $i = 1 To 3
				If $i_ID = $a_idInput[$i] Then
					$a_idInput[0] = $i_ID
					ExitLoop
				EndIf
			Next
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND


Добавлено:
Сообщение автоматически объединено:

Или так:
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>

Global $hGUI, $a_hInput[3], $idBtn, $idDummy, $aAccelKeys[1][2] = [['{Enter}']], $hFocus

$hGUI = GUICreate('InputData', 400, 260)
For $i = 0 To 2
	GUICtrlCreateInput($i + 1 & '_String', 100, 120 + $i * 30, 260, 30)
	$a_hInput[$i] = GUICtrlGetHandle(-1)
Next
$idBtn = GUICtrlCreateButton('Test', 40, 230, 60, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$idDummy = GUICtrlCreateDummy()
$aAccelKeys[0][1] = $idDummy
GUISetAccelerators($aAccelKeys)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtn
			MsgBox(64, 'Info', 'Btn', 0, $hGUI)
		Case $idDummy
			$hFocus = _WinAPI_GetFocus()
			For $hTmp In $a_hInput
				If $hTmp = $hFocus Then
;~ 					ConsoleWrite(GUICtrlRead(_WinAPI_GetDlgCtrlID($hFocus)) & @LF)
					MsgBox(64, 'Info', 'You send Enter in Input with Handle = ' & $hFocus & ', ID = ' & _WinAPI_GetDlgCtrlID($hFocus) & @LF & _
							'and with text = "' & _WinAPI_GetWindowText($hFocus) & '"', 0, $hGUI)
					ExitLoop
				EndIf
			Next
	EndSwitch
WEnd
 
Верх