GuiCtrlCreateInput: Tastendruck -> Event

  • Ich erstelle mir mittels GuiCtrlCreateInput() ein Eingabefeld.

    Wird jetzt ein Buchstabe in dieses Feld eingetragen, soll ein Event ausgelöst bzw. eine Funktion aufgerufen werden.


    Zweck ist es eine Live-Suche zu implementieren, sodass nach jedem Tastendruck das Suchergebnis weiter verfeinert wird.

  • Ich erstelle mir mittels GuiCtrlCreateInput() ein Eingabefeld.

    Wird jetzt ein Buchstabe in dieses Feld eingetragen, soll ein Event ausgelöst bzw. eine Funktion aufgerufen werden.


    Zweck ist es eine Live-Suche zu implementieren, sodass nach jedem Tastendruck das Suchergebnis weiter verfeinert wird.

    ich schätze mal, du willst jetzt fragen, wie es möglich ist, auf diese weise ein event auszulösen.

    bin mir nicht ganz sicher, ob das script-reif ist, aber funktionieren tuts:

    Code
    While 1
    	$msg = GUIGetMsg($main)
    	$text = GUICtrlRead($input)
    	Select
    		Case $msg = $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $text <> ''
    			<EVENT>
    	EndSelect
    WEnd

    d.h., sobald im input was drin steht, wird das <EVENT> aufgerufen ;)
    hoffe das hilft =)

  • Stimmt, eine Frage wäre nicht schlecht gewesen ;) Ja ich möchte wissen, wie ich diesen Event auslöse.

    Deine Lösung funktioniert. Wie sieht es dabei mit der Performance aus, wenn ständig das Input-Feld ausgelesen werden muss?

    hm, also bei mir hat das keine wirkliche last erzeugt, aber du kannst ja in die WHILE-schleife noch nen sleep(20) einbauen, dann wird das gefixt, falls es last gibt=)

  • Ich habe deine Idee umgesetzt und zusätzlich eingefügt, dass nur sekündlich eine Anfrage abgeschickt wird, falls der Suchtext sich geändert hat:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Local $suchzeit = -1
    Local $suchstring = ""

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

    $Form = GUICreate("", 312, 91)
    GUICtrlCreateLabel("Eingabe: ", 20, 20, 49, 17)
    GUICtrlCreateLabel("Suche nach: ", 20, 50, 100, 17)
    $in = GUICtrlCreateInput("", 100, 15, 181, 21)
    $out = GUICtrlCreateInput("", 100, 45, 181, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

    If $suchzeit <> @SEC Then
    If $suchstring <> GUICtrlRead($in) Then GUICtrlSetData($out, GUICtrlRead($in))
    $suchstring = GUICtrlRead($in)
    EndIf
    $suchzeit = @SEC
    WEnd

    [/autoit]