InputBox : OnEvent NUR bei Enter

  • huhu,
    habe ein kleines Problem und zwar:
    Ich habe eine Inputbox in einer GUI.
    Diese ist im OnEvent-Mode.

    Nun habe ich folgendes Problem :
    Die Funktion wird sowohl bei Druck auf ENTER, als auch beim Fokusverlust aufgerufen.
    Ich will aber verhindern, dass beim Fokusverlust das OnEvent-Ereignis ausgelöst wird.

    Habe es probiert, in der Funktion _Input1 (siehe unten) zu checken, ob das Objekt noch den Fokus hat, aber entweder ich faile oder es geht einfach nicht.

    Zur Verdeutlichung :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $GUI = GUICreate("GUI zum Testen", 215, 102, 193, 125)
    Global $Input1 = GUICtrlCreateInput("Box1", 16, 8, 121, 21)
    Global $Input2 = GUICtrlCreateInput("Box2", 16, 40, 121, 21)
    GUISetState(@SW_SHOW)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUICtrlSetOnEvent($Input1, "_Input1")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Input1 ()
    MsgBox(0,"","Diese Meldung soll nur bei RETURN und nicht beim Fokusverlust erscheinen.")
    EndFunc

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

    Func _exit ()
    Exit
    EndFunc

    [/autoit]

    Hoffe mir kann da jmd helfen
    Danke
    mfg Alcros

    Einmal editiert, zuletzt von Alcros (13. Januar 2013 um 20:03)

  • Sobald du die OnEvent-Funktion für das Input betrittst musst du einfach mittels _IsPressed() abfragen ob Enter gedrückt ist oder nicht. Sollte das nicht der Fall sein, kannst du die Funktion einfach wieder verlassen.

    Gruss Shadowigor

    • Offizieller Beitrag

    Wenn du ENTER als solches abfangen möchtest, kannst du auch mit _IsPressed() arbeiten:

    Spoiler anzeigen
    [autoit]


    #include <WinAPI.au3>
    #include <Misc.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $gui = GUICreate('Test', 300, 170)
    GUISetOnEvent(-3, '_end')
    Global $Input1 = GUICtrlCreateInput("Input1", 16, 8, 121, 21)
    Global $Input2 = GUICtrlCreateInput("Input2", 16, 40, 121, 21)
    Global $iIDFocus

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

    GUISetState()

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

    While 1
    If _IsPressed('0D') Then
    $iIDFocus = _WinAPI_GetDlgCtrlID(_WinAPI_GetFocus())
    Switch $iIDFocus
    Case $Input1
    MsgBox(0, 'ENTER', 'Input1')
    Case $Input2
    MsgBox(0, 'ENTER', 'Input2')
    EndSwitch
    EndIf
    Sleep(50)
    WEnd

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

    Func _end()
    Exit
    EndFunc

    [/autoit]
  • Danke an alle
    Ich denke mal Shadowigers Lösung ist die einfachste.

    Da ich heute den ganzen Tag nicht ins Forum kam (leere Seite), fiel mir auch noch was ein, was aber nicht 100% perfekt ist :

    Einfach einen Dummy-Button mit dem Stil $BS_DEFPUSHBUTTON versehen und dann unsichtbar machen.
    Hat den Nachteil, dass es von überall funzt und nicht nur vom Input.

    mfg