Hallo,
gibt es eine Abfrage, dass nach z.B. 4 eingegebenen Zahlen/Buchstaben in eine Inputbox eines GUIs keine Zeichen mehr akzeptiert werden und der Eingabestrich in ein nächstes Input springt? So wie bei manchen CD-Key eingaben?
Ihr habt bestimmt mal wieder was gesehen was ich übersehen hab^^
Aquaplant
Maximalzahl von Elementen in einem GUI Input
-
- [ gelöst ]
-
Aquaplant -
26. Dezember 2009 um 20:29 -
Geschlossen -
Erledigt
-
-
es geht mit
[autoit]
[/autoit]
GUICtrlSetLimit($input,4) -
Hallo,
[autoit]
bei einer Input Box mit dem Parameter M.
Bsp:$Input = InputBox("Zahl", "Bitte geben Sie eine Zahl ein:", "", " M4", 350, 100);M4 = Maximale Zeichen = 4
[/autoit] -
Cool, danke Kann man dann auch das automatische springen machen?
-
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#cs **************************************************************************Erfassungsmaske - Springen zwischen den Inputfeldern per Enter-Taste
[/autoit] [autoit][/autoit] [autoit]http://www.autoit.de/index.php?page…4634#post124634
[/autoit] [autoit][/autoit] [autoit]#ce **************************************************************************
[/autoit] [autoit][/autoit] [autoit]#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Guilistview.au3>
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 633, 438, 192, 132)
$ListView1 = GUICtrlCreateListView("Input1|Input2|Input3|Input4", 16, 16, 601, 265)
Global $hLVHandle = GUICtrlGetHandle($ListView1)
_GUICtrlListView_SetColumn($hLVHandle, 0, "Input1", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 1, "Input2", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 2, "Input3", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 3, "Input4", 130, 0)
$Input1 = GUICtrlCreateInput("", 16, 320, 129, 24)
GUICtrlSetLimit(-1, 4)
$Input2 = GUICtrlCreateInput("", 168, 320, 129, 24)
GUICtrlSetLimit(-1, 4)
$Input3 = GUICtrlCreateInput("", 328, 320, 137, 24)
GUICtrlSetLimit(-1, 4)
$Input4 = GUICtrlCreateInput("", 496, 320, 121, 24)
GUICtrlSetLimit(-1, 4)GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]$button = GUICtrlCreateButton("ADD", 250, 350, 100, 50)
[/autoit] [autoit][/autoit] [autoit]Global $hCM = GUICtrlCreateContextMenu($ListView1) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. KontextmenüeintGUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button
_NewItem()
Case $hCMDel
_GUICtrlListView_DeleteItemsSelected($hLVHandle)
EndSwitch
WEndFunc MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$nNotifyCode = BitShift($wParam, 16)
$nID = BitAND($wParam, 0x0000FFFF)
$hCtrl = $lParam
;ConsoleWrite($nNotifyCode& @CRLF)
If $nNotifyCode = 1281 Then
Switch ControlGetFocus("Form1")
Case "Edit1"
GUICtrlSetState($Input2, $gui_focus)
Case "Edit2"
GUICtrlSetState($Input3, $gui_focus)
Case "Edit3"
GUICtrlSetState($Input4, $gui_focus)
Case "Edit4"
GUICtrlSetState($button, $gui_focus)
EndSwitch
EndIf
EndFunc ;==>MY_WM_COMMANDFunc _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit]
GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
GUICtrlSetState($Input1, $gui_focus)
EndFunc ;==>_NewItem
Ein erster Versuch. Hat den Nachteil, dass der 5. Tastaturanschlag das Springen bewirkt und dieser nicht im nächsten Input ankommt.Edit \ Also den 5. Anschlag ans nächste Input zu schicken ist knifflig. :wacko:
Fällt sonst jemand dazu was ein? -
Man muss ja nicht immer alles mit GUIRegisterMsg und sonstigen Profi lösungen machen
so gehts doch auch:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Dim $aInput[4][2]
$hGUI = GUICreate("Form1", 625, 151, 192, 124)
GUICtrlCreateGroup("CD-Key eingeben: ", 24, 24, 577, 89)
$aInput[0][0] = GUICtrlCreateInput("", 58, 60, 105, 21)
$aInput[1][0] = GUICtrlCreateInput("", 194, 60, 105, 21)
$aInput[2][0] = GUICtrlCreateInput("", 329, 60, 105, 21)
$aInput[3][0] = GUICtrlCreateInput("", 465, 60, 105, 21)
$OK = GUICtrlCreateButton("Okey",500, 120, 105, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
_CheckInput()
WEnd
Func _CheckInput()
For $i = 0 to UBound($aInput)-1
If GUICtrlRead($aInput[$i][0]) <> $aInput[$i][1] Then
;~ ConsoleWrite("-> ungleich "&$i & @CRLF)
If StringLen(GUICtrlRead($aInput[$i][0])) = 4 Then
;~ ConsoleWrite("!> Stringlen" & @CRLF)
If $i < UBound($aInput)-1 Then
;~ ConsoleWrite("+> nächstes " &$i & @CRLF)
GUICtrlSetState($aInput[$i][0],8192)
GUICtrlSetState($aInput[$i+1][0],256)
EndIf
EndIf
$aInput[$i][1] = GUICtrlRead($aInput[$i][0])
GUICtrlSetData($aInput[$i][0],StringLeft(GUICtrlRead($aInput[$i][0]),4))
EndIf
Next
EndFunc