Jump to content
Sign in to follow this  
Voldemort

Input focado ao abrir programa.

Recommended Posts

Gostaria da ajuda de vocês com uma coisa simples, porém eu estou começando agora autoit e precisarei de muita ajuda...

tenho 5 input's, um do lado do outro, quero que assim que abra o programa, o primeiro input fique selecionado para digitar, após colocar 1 digito ele automaticamente vai para outro input como se fosse um 'TAB'

Share this post


Link to post
Share on other sites

Olá Voldemort.

 

É importante entender que para fazer isso, vc precisa manipular a rotina interna do INPUT.

Para fazer isso, um dos métodos é usando a função GUIRegisterMsg.

Segue exemplo:

#include <WinAPI.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Teste", 535, 263, 192, 124)
$Label1 = GUICtrlCreateLabel("Campo 1", 56, 56, 46, 17)
$Input1 = GUICtrlCreateInput("", 56, 80, 121, 21)
$Label2 = GUICtrlCreateLabel("Campo 2", 336, 56, 46, 17)
$Input2 = GUICtrlCreateInput("", 336, 80, 121, 21)
$Button1 = GUICtrlCreateButton("Ok", 216, 160, 75, 25)
GUIRegisterMsg($WM_COMMAND, "DENTRO_DO_INPUT")
GUISetState(@SW_SHOW)
While True
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd

Func DENTRO_DO_INPUT($hWnd, $iMsg, $iwParam, $ilParam)
   Local $iCode = _WinAPI_HiWord($iwParam), $hWndFrom = $ilParam
   If $iCode = $EN_CHANGE Then
      If GUICtrlGetHandle($Input1) = $hWndFrom Then Send("{TAB}")
   EndIf
   Return $GUI_RUNDEFMSG
EndFunc   ;==>DENTRO_DO_INPUT
 

Veja se é isso que vc quer, ou seja, ao informar QUALQUER COISA no "Campo 1", pula para o "Campo 2".

Claro que dá para refinar a rotina para não ser qualquer coisa, mas aí vai da sua necessidade.

  • Like 1

Share this post


Link to post
Share on other sites

Só modificar a rotina e incluir quantos INPUTs vc quiser.

Segue exemplo modificado, permitindo apenas números:

#include <WinAPI.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Teste", 515, 383, 192, 124)
$Label1 = GUICtrlCreateLabel("Campo 1", 56, 56, 46, 17)
$Input1 = GUICtrlCreateInput("", 56, 80, 121, 21)
$Label2 = GUICtrlCreateLabel("Campo 2", 336, 56, 46, 17)
$Input2 = GUICtrlCreateInput("", 336, 80, 121, 21)
$Label3 = GUICtrlCreateLabel("Campo 3", 56, 144, 46, 17)
$Input3 = GUICtrlCreateInput("", 56, 168, 121, 21)
$Label4 = GUICtrlCreateLabel("Campo 4", 336, 144, 46, 17)
$Input4 = GUICtrlCreateInput("", 336, 168, 121, 21)
$Label5 = GUICtrlCreateLabel("Campo 5", 56, 232, 46, 17)
$Input5 = GUICtrlCreateInput("", 56, 256, 121, 21)
$Button1 = GUICtrlCreateButton("Ok", 216, 320, 75, 25)

GUIRegisterMsg($WM_COMMAND, "DENTRO_DO_INPUT")
GUISetState(@SW_SHOW)
While True
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $Button1
         Exit
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd

Func DENTRO_DO_INPUT($hWnd, $iMsg, $iwParam, $ilParam)
   Local $iCode = _WinAPI_HiWord($iwParam), $iField = _WinAPI_LoWord($iwParam), $hWndFrom = $ilParam
   If $iCode = $EN_CHANGE Then
         If StringRegExp(GUICtrlRead($iField), "^[0-9]") Then
            Send("{TAB}")
         Else
            GUICtrlSetData($iField, "")
         EndIf
   EndIf
   Return $GUI_RUNDEFMSG
EndFunc   ;==>DENTRO_DO_INPUT

  • Like 1

Share this post


Link to post
Share on other sites

 

Só modificar a rotina e incluir quantos INPUTs vc quiser.

Segue exemplo modificado, permitindo apenas números:

#include <WinAPI.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Teste", 515, 383, 192, 124)
$Label1 = GUICtrlCreateLabel("Campo 1", 56, 56, 46, 17)
$Input1 = GUICtrlCreateInput("", 56, 80, 121, 21)
$Label2 = GUICtrlCreateLabel("Campo 2", 336, 56, 46, 17)
$Input2 = GUICtrlCreateInput("", 336, 80, 121, 21)
$Label3 = GUICtrlCreateLabel("Campo 3", 56, 144, 46, 17)
$Input3 = GUICtrlCreateInput("", 56, 168, 121, 21)
$Label4 = GUICtrlCreateLabel("Campo 4", 336, 144, 46, 17)
$Input4 = GUICtrlCreateInput("", 336, 168, 121, 21)
$Label5 = GUICtrlCreateLabel("Campo 5", 56, 232, 46, 17)
$Input5 = GUICtrlCreateInput("", 56, 256, 121, 21)
$Button1 = GUICtrlCreateButton("Ok", 216, 320, 75, 25)

GUIRegisterMsg($WM_COMMAND, "DENTRO_DO_INPUT")
GUISetState(@SW_SHOW)
While True
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $Button1
         Exit
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd

Func DENTRO_DO_INPUT($hWnd, $iMsg, $iwParam, $ilParam)
   Local $iCode = _WinAPI_HiWord($iwParam), $iField = _WinAPI_LoWord($iwParam), $hWndFrom = $ilParam
   If $iCode = $EN_CHANGE Then
         If StringRegExp(GUICtrlRead($iField), "^[0-9]") Then
            Send("{TAB}")
         Else
            GUICtrlSetData($iField, "")
         EndIf
   EndIf
   Return $GUI_RUNDEFMSG
EndFunc   ;==>DENTRO_DO_INPUT

Rapaz é praticamente isso que quero, só que nesse input só pode ser digitado " um NUMERO ", ai assim que a pessoa colocar o número, ele passe automaticamente para o outro input que tbm é pra digitar 1 numero e passar pro próximo e assim por diante, pode me ajudar ?

Share this post


Link to post
Share on other sites

Rapaz é praticamente isso que quero, só que nesse input só pode ser digitado " um NUMERO ", ai assim que a pessoa colocar o número, ele passe automaticamente para o outro input que tbm é pra digitar 1 numero e passar pro próximo e assim por diante, pode me ajudar ?

 

No meu teste a cada numero digitado ele passa para o próximo input, assim como foi pedido.

Share this post


Link to post
Share on other sites

No meu teste a cada numero digitado ele passa para o próximo input, assim como foi pedido.

o problema é que depois que jogo para o koda para formatar ele para de funcionar essa função do tab automático.

olha como ficou...

 

#include <ButtonConstants.au3>

#include <EditConstants.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=

$Form1 = GUICreate("Teste", 516, 384, 192, 124)

$Input1 = GUICtrlCreateInput("0", 16, 128, 50, 83, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER,$WS_BORDER))

GUICtrlSetLimit(-1, 1)

GUICtrlSetFont(-1, 48, 400, 0, "Arial Rounded MT Bold")

GUICtrlSetColor(-1, 0x0000FF)

$Input2 = GUICtrlCreateInput("0", 72, 128, 50, 83, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER,$WS_BORDER))

GUICtrlSetLimit(-1, 1)

GUICtrlSetFont(-1, 48, 400, 0, "Arial Rounded MT Bold")

GUICtrlSetColor(-1, 0x0000FF)

$Input3 = GUICtrlCreateInput("0", 128, 128, 50, 83, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER,$WS_BORDER))

GUICtrlSetLimit(-1, 1)

GUICtrlSetFont(-1, 48, 400, 0, "Arial Rounded MT Bold")

GUICtrlSetColor(-1, 0x0000FF)

$Input4 = GUICtrlCreateInput("0", 184, 128, 50, 83, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER,$WS_BORDER))

GUICtrlSetLimit(-1, 1)

GUICtrlSetFont(-1, 48, 400, 0, "Arial Rounded MT Bold")

GUICtrlSetColor(-1, 0x0000FF)

$Input5 = GUICtrlCreateInput("0", 240, 128, 50, 83, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER,$WS_BORDER))

GUICtrlSetLimit(-1, 1)

GUICtrlSetFont(-1, 48, 400, 0, "Arial Rounded MT Bold")

GUICtrlSetColor(-1, 0x0000FF)

$Button1 = GUICtrlCreateButton("Ok", 216, 320, 75, 25)

GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

 

While 1

$nMsg = GUIGetMsg()

Switch $nMsg

Case $GUI_EVENT_CLOSE

Exit

 

EndSwitch

WEnd

Share this post


Link to post
Share on other sites

Olha Voldemort, acho que vc deve prestar um pouco mais de atenção no código que vc postou e o que eu postei.

 

O Koda serve apenas para facilitar design da aplicação, mas a programação em si tem que ser no braço!

 

Verifique também que o código está separado em 2 (duas) seções:

 

1) a seção GUI: onde se define quantos e quais campos, suas coordenadas e atributos

$Form1 = GUICreate("Teste", 515, 383, 192, 124)
$Label1 = GUICtrlCreateLabel("Campo 1", 56, 56, 46, 17)
$Input1 = GUICtrlCreateInput("", 56, 80, 121, 21)
$Label2 = GUICtrlCreateLabel("Campo 2", 336, 56, 46, 17)
$Input2 = GUICtrlCreateInput("", 336, 80, 121, 21)
$Label3 = GUICtrlCreateLabel("Campo 3", 56, 144, 46, 17)
$Input3 = GUICtrlCreateInput("", 56, 168, 121, 21)
$Label4 = GUICtrlCreateLabel("Campo 4", 336, 144, 46, 17)
$Input4 = GUICtrlCreateInput("", 336, 168, 121, 21)
$Label5 = GUICtrlCreateLabel("Campo 5", 56, 232, 46, 17)
$Input5 = GUICtrlCreateInput("", 56, 256, 121, 21)
$Button1 = GUICtrlCreateButton("Ok", 216, 320, 75, 25) 

2) a seção programação: onde se processa o que deve ser feito

GUIRegisterMsg($WM_COMMAND, "DENTRO_DO_INPUT")
GUISetState(@SW_SHOW)
While True
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $Button1
         Exit
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd
 
Func DENTRO_DO_INPUT($hWnd, $iMsg, $iwParam, $ilParam)
   Local $iCode = _WinAPI_HiWord($iwParam), $iField = _WinAPI_LoWord($iwParam), $hWndFrom = $ilParam
   If $iCode = $EN_CHANGE Then
         If StringRegExp(GUICtrlRead($iField), "^[0-9]") Then
            Send("{TAB}")
         Else
            GUICtrlSetData($iField, "")
         EndIf
   EndIf
   Return $GUI_RUNDEFMSG
EndFunc   ;==>DENTRO_DO_INPUT

Agora confira e veja o que faz funcionar as coisas!

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×