Hey,
folgendes Problem:
Bei einer Erfassungsmaske (hauptsächlich für Zahlen) soll man immer mit der Enter-Taste (bzw. Num-Enter) zum nächsten Feld springen können.
Das funktioniert auch grudnsätzlich:
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
Global $eventCount = 0
$sHeader = "Input1|Input2|Input3"
Global $hGui = GUICreate("", 400, 400, -1, -1)
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
Global $aInputWidth[$aHeader[0]] = [100, 100, 100] ; hier die Länge (in Pixel) der Inputfelder eintragen
Global $xPos = 20
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], $xPos + 2,200, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", $xPos, 220, $aInputWidth[$i - 1], 20,Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
$xPos += $aInputWidth[$i - 1] + 5
Next
GUISetState(@SW_SHOW, $hGui)
GUIRegisterMsg($WM_Command ,"WM_COMMAND")
While 1
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
case $anew[0]
GUICtrlSetState($aNew[1], $GUI_FOCUS)
#Region Schließen
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
exit
EndSwitch
[/autoit] [autoit][/autoit] [autoit]#EndRegion Schließen
EndSwitch
WEnd
[/autoit] [autoit][/autoit] [autoit]Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hwndFrom, $iIDFrom, $iCode
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $iIDFrom
case $anew[0]
switch $iCode
case 0
GUICtrlSetState($aNew[1], $GUI_FOCUS)
EndSwitch
case $anew[1]
switch $icode
case 0
GUICtrlSetState($aNew[2], $GUI_FOCUS)
EndSwitch
case $anew[2]
switch $iCode
case 0
GUICtrlSetState($aNew[0], $GUI_FOCUS)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Allerdings gibt es in meinem Fall auch einige Felder, die nicht jedes mal befüllt/geändert werden müssen.
WM_Command reagiert aber leider nur nachdem im Input etwas erfasst wurde
Gibts einen Trick das zu umgehen?
Gruß nuts