Input-Änderung bemerken

  • Hallo,

    gibt es irgendeine Möglichkeit, einen Input (GUICtrlCreateInput) zu überwachen, sodass bei einer Änderung seines Inhalts eine Funktion aufgerufen wird? Also ungefähr so wie der onkeyup Event von Javascript.
    Mir ist klar, dass man eine While-Schleife erstellen kann, in der ständig der Inhalt des Inputs ausgelsen wird, aber so was will ich vermeiden. (Und ein OnEvent von einem Input wird erst nach einer Änderung und dem verlieren des Fokus des Inputs aktiviert)

    Danke für die Hilfe :)

    Einmal editiert, zuletzt von fschuetz (1. Dezember 2013 um 21:11)

    • Offizieller Beitrag

    Du kannst die WM_COMMAND Message des Input abfragen.
    Schau dir mal das Beispiel von _GUICtrlEdit_Create an.
    Wenn sich was im Input ändert wird die Message $EN_CHANGE gesendet.


    Edit: Hier mal ein Beispiel

    Spoiler anzeigen
    [autoit]

    #include <GuiEdit.au3>
    #include <WinAPI.au3> ; used for Lo/Hi word
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $Debug_Ed = False ; Check ClassName being passed to Edit functions, set to True and use a handle to another control to see it work

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

    Global $hEdit

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

    _Example1()

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

    Func _Example1()
    Local $hGUI

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

    ; Create GUI
    $hGUI = GUICreate("Input Create", 400, 300)
    $hInput = GUICtrlCreateInput("Test", 2, 2, 100, 21)
    $hEdit = GUICtrlGetHandle($hInput)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Example1

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
    Case $hEdit, $hWndEdit
    Switch $iCode

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

    Case $EN_CHANGE ; Sent when the user has taken an action that may have altered text in an edit control
    ConsoleWrite("Inhalt des Inputs hat sich geändert" & @LF)

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

    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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