Nach jeden 4. Zeichen ein "-" setzen

  • Hallo

    Ich habe jetzt ne Inputbox,ich möchte,dass nach jeden 4.Zeichen ein "-" (Bindestrich) automatisch kommt.

    Die Zeichenlänge sollte auf 4 Balken (mit 16 Zeichen ) reduziert werden.... :)

    z.B.

    XXXX-XXXX-XXXX-XXXX

    Einmal editiert, zuletzt von MysticSun (1. Januar 2010 um 22:24)

    • Offizieller Beitrag

    Schau dir mal diesen Thread an [ gelöst ] Mit Entertaste zum nächsten Input Feld wechseln, ist zwar nicht mit InputBox aber ich denke du kannst es eventuell gebrauchen.


    Edit: Falsches Lesezeichen :whistling: [ gelöst ] Maximalzahl von Elementen in einem GUI Input

  • hm ne sry ,leider net :-/


    Hier ma BsP.

    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Gui", 232, 83, 192, 124)
    $1 = GUICtrlCreateInput("", 16, 32, 201, 21)
    $Label1 = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hier mein Vorschlag:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Gui", 232, 83, 192, 124)
    $1 = GUICtrlCreateInput("", 16, 32, 201, 21)
    GUICtrlSetLimit($1, 16)
    $Label1 = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    ;~ GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $output

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $aTemp = StringSplit(GUICtrlRead($1), "")
    For $x = 1 To UBound($aTemp) - 1
    $output &= $aTemp[$x]
    If Mod($x, 4) = 0 And $x < UBound($aTemp) - 1 Then $output &= "-"
    Next
    MsgBox(0, "Format", $output)
    EndSwitch
    WEnd

    [/autoit]


    Gruß,
    UEZ

    Edit: habe noch GUICtrlSetLimit($1, 16) hinzugefügt!
    Edit2: sorry, habe das "automatisch" überlesen! -> Oscar's Version unten ist deine Lösung!

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (1. Januar 2010 um 22:12)

    • Offizieller Beitrag

    Uuuups, hab das falsche Lesezeichen erwischt. :whistling: [ gelöst ] Maximalzahl von Elementen in einem GUI Input
    6.Post von SEuBo.

    • Offizieller Beitrag

    Hier ist meine Lösung:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Gui", 232, 83, 192, 124)
    $1 = GUICtrlCreateInput("", 16, 32, 201, 21)
    $Label1 = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID, $sInput, $aInput
    $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $1 Then
    $sInput = StringReplace(StringLeft(GUICtrlRead($1), 19), '-', '')
    $aInput = StringRegExp(StringUpper($sInput), '.{1,4}', 3)
    $sInput = ''
    For $i = 0 To UBound($aInput) - 1
    $sInput &= $aInput[$i] & '-'
    Next
    $sInput = StringTrimRight($sInput, 1)
    GUICtrlSetData($1, $sInput)
    If StringLen($sInput) = 19 Then
    GUICtrlSetState($Button1, $GUI_ENABLE)
    Else
    GUICtrlSetState($Button1, $GUI_DISABLE)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Oscar , sehr schön dein Beispiel. :thumbup: Das kommt gleich mal in meine Sammlung :thumbup:

  • Hier noch eine Variante (ein Mix aus Oscar's und meiner Variante):

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Gui", 232, 83, 192, 124)
    $1 = GUICtrlCreateInput("", 16, 32, 201, 21)
    $Label1 = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    $label_limit = 19
    GUICtrlSetLimit($1, $label_limit)
    $Button1 = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    $iLen_prev = 0
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode, $nID, $sInput
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $1 Then
    GUICtrlSetData($1, StringUpper(GUICtrlRead($1))) ;Großschreibung
    $iLen = StringLen(GUICtrlRead($1))
    If Mod($iLen + 1, 5) = 0 And $iLen < $label_limit And $iLen > $iLen_prev Then GUICtrlSetData($1,GUICtrlRead($1) & "-")
    $iLen_prev = $iLen
    If $iLen = $label_limit Then
    GUICtrlSetState($Button1, $GUI_ENABLE)
    Else
    GUICtrlSetState($Button1, $GUI_DISABLE)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    3 Mal editiert, zuletzt von UEZ (2. Januar 2010 um 01:05)

    • Offizieller Beitrag

    UEZ auch nicht schlecht. Dein Script hat aber einen Nachteil zum Script von Oscar. Wenn du z.b. 16 Zeichen schreibst, Backspace benutzt und dann wieder ins Input schreibst, werden die - nicht gesetzt.

    • Offizieller Beitrag

    Und noch ein bisschen kürzer (so habe ich es jetzt in meine Sammlung aufgenommen):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate('Seriennr. eingeben', 240, 100)
    GUICtrlCreateLabel('Format: XXXX-XXXX-XXXX-XXXX', 20, 10, 200, 20)
    $hInput = GUICtrlCreateInput('', 20, 30, 200, 25)
    GUICtrlSetFont(-1, 12, 400, 0, 'Courier New')
    $hOk = GUICtrlCreateButton('Weiter', 146, 64, 75, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hOk
    MsgBox(0, 'Seriennr.', GUICtrlRead($hInput))
    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $sSerial
    If BitAND($wParam, 0x0000FFFF) = $hInput Then
    $sSerial = StringReplace(StringLeft(GUICtrlRead($hInput), 19), '-', '')
    $sSerial = StringMid(StringRegExpReplace($sSerial, '.{1,4}', '-$0'), 2)
    GUICtrlSetData($hInput, StringUpper($sSerial))
    If StringLen($sSerial) = 19 Then
    GUICtrlSetState($hOk, $GUI_ENABLE)
    Else
    GUICtrlSetState($hOk, $GUI_DISABLE)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • Kommt nur mir das so vor
    oder hat das Ähnlichkeit mit
    einem Keygen?

    Wenn jemand vorhätte einen Keygen zu schreiben, würde er nicht daran "scheitern" einen Bindestrich einzufügen.
    Das hier kommt allerdings auch mehr einer Installationsroutine nahe, in der eine Seriennummer abgefragt wird.

  • Normalerweise möchte man(n) es größer haben, aber hier die noch kürzere Variante: :D

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form = GUICreate("Seriennummer", 232, 83)
    $1 = GUICtrlCreateInput("", 48, 30, 136)
    $Label = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    GUICtrlSetLimit($1, 19)
    $Button = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()
    $iLen_prev = 0
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    If BitAND($wParam, 0x0000FFFF) = $1 Then
    GUICtrlSetData($1, StringUpper(GUICtrlRead($1))) ;Großschreibung
    $i = GUICtrlRead($1)
    $iLen = StringLen($i) + 1
    If Mod($iLen, 5) = 0 And $iLen > $iLen_prev And $iLen < 20 Then GUICtrlSetData($1, $i & "-")
    If Mod($iLen, 5) = 0 And $iLen < $iLen_prev Then GUICtrlSetData($1, StringLeft($i, $iLen - 2))
    $iLen_prev = $iLen
    If $iLen = 20 Then
    GUICtrlSetState($Button, $GUI_ENABLE)
    Else
    GUICtrlSetState($Button, $GUI_DISABLE)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Gruß,
    UEZ ;)

    Edit: hoffentlich jetzt Bugfrei!

  • Einen habe ich auch noch ... :D

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Gui", 232, 83, 192, 124)
    $1 = GUICtrlCreateInput("", 16, 32, 201, 21)
    $Label1 = GUICtrlCreateLabel("Format: XXXX-XXXX-XXXX-XXXX", 32, 8, 163, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 144, 56, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $sInput
    Switch (BitAND ($wParam, 0xFFFF))
    Case $1
    $sInput = StringUpper (GUICtrlRead ($1))
    Switch (StringLen ($sInput))
    Case 4
    ContinueCase
    Case 9
    ContinueCase
    Case 14
    GUICtrlSetData ($1, $sInput & '-')
    Case 19
    GUICtrlSetData ($1, $sInput)
    GUICtrlSetState($Button1, BitOR ($GUI_ENABLE, $GUI_FOCUS))
    Case Else
    GUICtrlSetData ($1, $sInput)
    GUICtrlSetState($Button1, $GUI_DISABLE)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

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


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (3. Januar 2010 um 18:36)

  • Wenn jemand vorhätte einen Keygen zu schreiben, würde er nicht daran "scheitern" einen Bindestrich einzufügen.
    Das hier kommt allerdings auch mehr einer Installationsroutine nahe, in der eine Seriennummer abgefragt wird.

    Oh man, stimmt. :D Ich denke natürlich
    wieder total umständlich. :D


    MfG
    qixx

  • Ich finde Greenhorn's besser als Oscar's, hab sie mir auch gleich mal abgespeichert für evtl. Pojekte. :D
    Kleine Frage, wozu ist $WS_GROUP da? Da ist doch nur ein Control.