welche events für Input-Feld möglich?

  • Ich möchte eine Funktion aufrufen, wenn der Benutzer in ein Input-Feld schreibt. Mittels GUICtrlSetOnEvent wird die Funktion aufgerufen, sobald das Input-Feld den Fokus verliert oder der Benutzer Enter tippt.
    Kann ich eine Funktion auch sofort aufrufen, wenn der Benutzer in das Input-Feld schreibt?

    Etwas allgemeiner gesagt: welche events (Klick, Doppelklick, Tastendruck, Fokus verlieren etc.) kann ich wie für ein Control-Element definieren?

    Ergänzung: Ich verwende den OnEvent mode in der AutoIt Version 3.2.10.0 .

    Einmal editiert, zuletzt von daign (2. Juni 2008 um 16:59)

    • Offizieller Beitrag

    Erstmal: Herzlich willkommen hier im Forum!

    Du kannst mittels AdlibEnable eine Funktion aufrufen, in der Du die Eingabe ausliest und testest:

    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    GUICreate("test", 320, 120)
    GUISetOnEvent($GUI_EVENT_CLOSE,'_End')
    $InputID = GUICtrlCreateInput("", 10, 5, 300, 20)
    GUISetState()

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

    AdlibEnable('_Check', 100)
    While 1
    Sleep(100)
    WEnd

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

    Func _Check()
    Local $text = GUICtrlRead($InputID)
    If $text = 'blabla' Then Exit MsgBox(0, '', 'Warum blabla?')
    EndFunc

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

    Func _End()
    Exit
    EndFunc

    [/autoit]

    Und mit GUIRegisterMsg kannst Du Dir einen eigenen EventHandler erstellen, mit dem Du auch auf einen Doppelklick oder so reagieren kannst.

  • Ich müsste also eine Funktion laufen lassen, die ständig den Inhalt des Input-Feldes mit dem (in einer Variablen gespeicherten) Wert von vorher vergleicht?

  • Und wenn ich GUIRegisterMsg verwende, könnte ich für ein Event eine Funktion schreiben, welche dann das gerade benutzte Control-Element (es sollen mehrere Input-Felder vorhanden sein) ermittelt und entsprechend weitere Funktionen aufruft, richtig?
    Hat mir auf jeden Fall erstmal geholfen, Danke!

    • Offizieller Beitrag

    Hier mal ein Funktionsaufruf mit GUIRegisterMsg:

    [autoit]


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

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

    Opt('GUIOnEventMode', 1)
    $r = GUIRegisterMsg($WM_COMMAND, "_Check")

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

    If Not $r Then Exit

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

    GUICreate("test", 320, 120)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_End")

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

    $InputID = GUICtrlCreateInput("", 10, 5, 300, 20)

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

    $Label = GUICtrlCreateLabel("", 20, 30, 50, 24)
    GUICtrlSetFont(-1, 16, 400, 0, "Arial")

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

    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Check($hWndGUI, $MsgID, $WParam, $LParam)
    GUICtrlSetData($Label, StringRight(GUICtrlRead($InputID),1))
    EndFunc

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

    Func _End()
    Exit
    EndFunc

    [/autoit]