2 Fragen zu GUICtrlCreateInput

  • Guten Morgen,

    mal 2 Fragen zu

    [autoit]

    GUICtrlCreateInput

    [/autoit]

    1.) Ich möchte damit ein optionales Text Eingabefeld verwirklichen. Hierbei sollen z.B. nur 60 Zeichen möglich sein.

    Ich würde gerne rechts von dem Feld die Zeichen runterzählen lassen (also nach dem Stil: ... noch 43 Zeichen | ... noch 16 Zeichen) während der Benutzer die Zeile befüllt. Wenn dann 61 Zeichen geschrieben werden, soll der Hintergrund Rot werden

    2.) Wie kann man in so einem Feld einen horizontalen Scrollbalken einblenden lassen, wenn der Text länger ist, als das Feld (hat nichts mit Frage 1 zu tun!)

    Danke

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (16. Dezember 2010 um 14:11)

  • zu 1.:
    Du könntest das Input - Feld auch einfach auf 60 Zeichen begrenzen mit

    [autoit]

    GUICtrlSetLimit

    [/autoit]

    ansonsten so wie du es beschrieben hast:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $mainWin, $input, $label
    Global $inpRed = False

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

    AdlibRegister("_checkInput", 100)

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

    $mainWin = GUICreate("test", 250, 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    $input = GUICtrlCreateInput("", 10, 10, 100, 15)
    $label = GUICtrlCreateLabel("Noch 60 Zeichen", 115, 10, 100, 15)
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _checkInput()
    If StringLen(GUICtrlRead($input)) > 60 Then
    If Not $inpRed Then
    GUICtrlSetBkColor($input, 0xFF0000)
    $inpRed = True
    EndIf
    Else
    If $inpRed Then
    GUICtrlSetBkColor($input, 0xFFFFFF)
    $inpRed = False
    EndIf
    EndIf
    GUICtrlSetData($label, "Noch " & 60 - (StringLen(GUICtrlRead($input))) & " Zeichen")
    EndFunc ;==>_checkInput

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    zu 2.:
    Soweit ich weiß kann man in Input - Boxen keine Scrollbalken einbauen, du könntest sie höchstens mehrzeilig machen.
    Wobei ich mir da nicht sicher bin, falls es geht würde ich auch gerne wissen wie ^^

    7 Mal editiert, zuletzt von Milla (16. Dezember 2010 um 10:15)

  • Das liegt daran, dass so wies jetzt ist alle 0,1 sekunden das Label neu gesetzt wird.
    Machs so dann dürfte es weg sein:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $mainWin, $input, $label
    Global $inpRed = False, $inpCount = -1

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

    AdlibRegister("_checkInput", 100)

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

    $mainWin = GUICreate("test", 250, 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    $input = GUICtrlCreateInput("", 10, 10, 100, 15)
    $label = GUICtrlCreateLabel("Noch 60 Zeichen", 115, 10, 100, 15)
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _checkInput()
    If StringLen(GUICtrlRead($input)) > 60 Then
    If Not $inpRed Then
    GUICtrlSetBkColor($input, 0xFF0000)
    $inpRed = True
    EndIf
    Else
    If $inpRed Then
    GUICtrlSetBkColor($input, 0xFFFFFF)
    $inpRed = False
    EndIf
    EndIf
    If StringLen(GUICtrlRead($input)) <> $inpCount Then
    GUICtrlSetData($label, "Noch " & 60 - (StringLen(GUICtrlRead($input))) & " Zeichen")
    $inpCount = StringLen(GUICtrlRead($input))
    EndIf
    EndFunc ;==>_checkInput

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]
    • Offizieller Beitrag

    Ich würde es mit GUIRegisterMsg machen:

    Spoiler anzeigen
    [autoit]


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

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

    Opt("GuiOnEventMode", 1)

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

    Global $mainWin, $input, $label

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

    $mainWin = GUICreate("test", 250, 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    $input = GUICtrlCreateInput("", 10, 10, 100, 20)
    GUICtrlSetLimit(-1, 60)
    $label = GUICtrlCreateLabel("Noch 60 Zeichen", 115, 10, 100, 15)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

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

    While Sleep(100)
    WEnd

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

    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF), $iLen = StringLen(GUICtrlRead($input))
    If $iLen > 60 Then
    GUICtrlSetBkColor($input, 0xFFAAAA)
    Return $GUI_RUNDEFMSG
    Else
    GUICtrlSetBkColor($input, 0xFFFFFF)
    EndIf
    Switch $nID
    Case $input
    GUICtrlSetData($label, StringFormat('Noch %i Zeichen', 60 - $iLen))
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_checkInput

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]