Gui/Input mit ESC/Enter schließen

  • Hallo zusammen,

    ich habe mehrere Fenster und nutze den OnEventMode. Wenn ich auf einen Button klicke, öffnet sich folgendes Fenster:

    [autoit]

    $RenameGUI = GUICreate($Title & " Rename", $WinWidth, 17, @DesktopWidth / 2 + $WinWidth +5 , 25, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW), $MainGui)
    GUICtrlCreateInput($Wintitle, 0, 0, $WinWidth, 17, BitOR($ES_WANTRETURN, $ES_LEFT, $ES_AUTOHSCROLL))
    GUISetState(@SW_SHOW, $RenameGUI)

    [/autoit]

    Per klick auf den Button schließt sich das Fenster wieder (GUIDelete). Es soll aber ebenfalls geschlossen werden, wenn der User ENTER oder ESC in diesem Fenster drückt. Ich komm einfach nicht drauf, wie man das umsetzt oO

  • Mach es doch mit Hotkeys. Du kannst sie direkt ausführen lassen, oder beide auf eine _Funktion() weisen lassen. Zumindestenshaben ich so dein Problem verstanden.

  • Hallo sc4ry,

    ich weis nicht wo dein Problem liegt. Einzig für die Enter-Taste must du dem Schliessen-Button den Style $BS_DEFPUSHBUTTON zuweisen. Die Escape-Taste funktioniert automatisch:

    Spoiler anzeigen
    [autoit]

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

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

    Opt('GUIOnEventMode', 1) ;schaltet den OnEvent-Modus ein

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

    $cidGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $cidGui1 gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    $cidbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_CallGui2')
    ;Beim Klicken des Buttons wird die Funktion _CallGui2 aufgerufen

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

    $cidbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "ICQ" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_RunICQ')
    ;Beim Klicken des Buttons wird die Funktion _RunICQ aufgerufen

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

    $cidbtnExit1 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_End')
    ;Beim Klicken des Buttons wird die Funktion _END aufgerufen

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

    $cidGui2 = GUICreate('GUI 2', 500, 300, 200, 50, -1, -1, $cidGui1)
    ;erzeugt eine GUI als Child von Gui1, die zurückgebebene ID wird in der Variablen $cidGui2 gespeichert
    GUISetOnEvent($GUI_EVENT_CLOSE, '_BackToGui1')

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

    $cidButton1 = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "MsgBox" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_MsgBox')
    ;Beim Klicken des Buttons wird die Funktion _MsgBox aufgerufen

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

    $cidButton2 = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "zurück" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_BackToGui1')
    ;Beim Klicken des Buttons wird die Funktion _BackToGui1 aufgerufen

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

    $cidbtnExit2 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21,$BS_DEFPUSHBUTTON )
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_End')
    ;Beim Klicken des Buttons wird die Funktion _END aufgerufen
    GUISetState(@SW_SHOW, $cidGui1)

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _end()
    GUIDelete($cidGui2)
    GUIDelete($cidGui1)
    Exit
    EndFunc ;==>_end

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

    Func _CallGui2()
    GUISetState(@SW_HIDE, $cidGui1) ;entweder so
    ;GUISetState(@SW_DISABLE, $cidGui1) ;oder so dann bleibt die 1. Gui sichtbar ist aber nicht aktriv
    GUISetState(@SW_SHOW, $cidGui2)
    EndFunc ;==>_CallGui2

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

    Func _RunICQ()
    MsgBox(0, "", "Jetzt würde ICQ gestartet")
    ;Run("C:\Program Files\ICQ7.0\ICQ.exe")
    EndFunc ;==>_RunICQ

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

    Func _BackToGui1()
    GUISetState(@SW_SHOW, $cidGui1) ;nur nötig falls Gui versteckt
    ;GUISetState(@SW_ENABLE, $cidGui1) ;nur nötig falls Gui DISABLEd
    GUISetState(@SW_HIDE, $cidGui2)
    EndFunc ;==>_BackToGui1

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

    Func _MsgBox()
    MsgBox(0, 'Test', 'Test', 0, $cidGui2)
    EndFunc ;==>_MsgBox

    [/autoit]

    mfg autoBert

  • Moin

    Ich mache sowas immer mit:

    [autoit]

    _IsPressed()

    [/autoit]


    Also so:

    [autoit]

    if _IsPressed("0D") Then GuiDelete() ; 0D = ENTER

    [/autoit]


    Fertig, das ganze in einer While, Do, etc. Schleife und wenn du dann Enter drückst, schließt sich das Fenster.

    mfg
    hauke96

  • Hab hier mal ein kleines Script wo ESC und ENTER gebraucht werden können:

    [autoit]

    #include <Misc.au3> ; damit _IsPressed() funktioniert
    GUICreate("GUI", 200, 70)
    $Input = GUICtrlCreateInput("", 10, 10, 180, 20)
    $lbl = GUICtrlCreateLabel("", 10, 40, 180, 20)
    GUISetState()
    while 1
    if _IsPressed("0D") Then GUICtrlSetData($lbl, GUICtrlRead($Input)) ; Wenn du Enter drückst, wird der Input Inhalt im label angezeigt
    if GUIGetMsg() = -3 Or _IsPressed("1B") Then Exit ; wenn ESC oder das Kreuz gedrückt wird, dann wird das Programm beendet
    WEnd

    [/autoit]


    Ich hoffe das hilft.

    mfg
    hauke96

    • Offizieller Beitrag

    Wenn man gerne Hotkeys verwenden will und diese nur in einer bestimmten GUI funtionieren sollen dann gibt es auch GUISetAccelerators.
    Der Hotkey funktioniert nur wenn die GUI den Focus hat.