Maximalzahl von Elementen in einem GUI Input

  • 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

    Einmal editiert, zuletzt von Aquaplant (26. Dezember 2009 um 22:25)

  • Hallo,
    bei einer Input Box mit dem Parameter M.
    Bsp:

    [autoit]

    $Input = InputBox("Zahl", "Bitte geben Sie eine Zahl ein:", "", " M4", 350, 100);M4 = Maximale Zeichen = 4

    [/autoit]
  • Spoiler anzeigen
    [autoit]


    #cs **************************************************************************

    [/autoit] [autoit][/autoit] [autoit]

    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>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <Guilistview.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $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)

    [/autoit] [autoit][/autoit] [autoit]

    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
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeint

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    _NewItem()
    Case $hCMDel
    _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $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_COMMAND

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
    GUICtrlSetState($Input1, $gui_focus)
    EndFunc ;==>_NewItem

    [/autoit]


    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?

    Einmal editiert, zuletzt von nuts (26. Dezember 2009 um 21:00)

  • Man muss ja nicht immer alles mit GUIRegisterMsg und sonstigen Profi lösungen machen ^^
    so gehts doch auch:

    Spoiler anzeigen
    [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)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $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

    [/autoit]