GUI Inputbox - spezielle Eingabe sperren?

  • Weiß jetzt nicht ob es dafür einen Style gibt, für Inputs im allgemeinen könnte man das so lösen:

    Spoiler anzeigen
    [autoit]


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

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

    GUICreate("")
    $Inp1 = GUICtrlCreateInput("",10,10)

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

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    while GUIGetMsg()<>$GUI_EVENT_CLOSE
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $controlID = BitAND($wParam, 0xFFFF)
    if $controlID = $Inp1 then
    Local $string1 = GUICtrlRead($controlID)
    $string=StringReplace($string1," ","")
    if $string1<> $string then ToolTip("Keine Leerzeichen erlaubt!")
    GUICtrlSetData($controlID, $string)
    EndIf
    EndFunc

    [/autoit]
  • Wenn es um BOTS geht bitte einmal die Forenregel durchlesen. Hier ist meine dreckige Lösung:

    [autoit]


    GUICreate("",200,100,-1,-1)
    $gInput = GUICtrlCreateInput("",5,25,100,50)
    GUISetState(@SW_SHOW)
    while 1
    If GUIGetMsg() = -3 Then Exit
    $sInput = GUICtrlRead($gInput)
    If StringInStr($sInput," ") <> 0 Then
    $sOutput = StringReplace($sInput," ","")
    GUICtrlSetData($gInput,$sOutput)
    EndIf
    WEnd

    [/autoit]


    StringReplace statt StringTrimRight -> Mein Fehler!

    :thumbup:

    2 Mal editiert, zuletzt von bobekos (27. August 2014 um 16:18)

  • Auf die Weise, wie Markus123 dir das zeigt, wird bei jedem Event, welches das Input-Feld auslöst (anklicken, ändern,...) geprüft, ob ein Leerzeichen in dem Inputfeld steht. Was du in deinem Script sonst machst ist relativ egal. Wenn die Message kommt wird das auch geprüft...
    Wobei man das noch verbessern könnte, sodass nur bei einer Änderung des Inputfeldes der Inhalt des Feldes geprüft wird:

    [autoit]

    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode=BitShift($wParam, 16)
    Local $hCtrl=$lParam
    If $hCtrl=$Input and ($nNotifyCode = 1024 Or $nNotifyCode = 786) Then
    GUICtrlSetData($hCtrl,StringReplace(GUICtrlRead($hCtrl)," ",""))
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND") wird bei jeder WM-Command Message aufgerufen.
    (Controls senden Messages, bei bestimmten Dingen, die mit ihnen gemacht werden. Wenn Beispielsweise ein Button gedrückt wird sendet er eine Message. Mit WM_Command könntest du diese Abfragen und darauf reagieren... (guigetmsg) gibt dir nur diese message zur vereinfachung ;)