Gui_Event_Close mit mehreren GUIs

  • Moin,

    Muss mal eine Frage zu einem Thema stellen, welches ich bis immer versucht habe zu umgehen. Nun will ich´s aber mal wissen.

    Wie wechsel ich zwischen 2 GUIs um den Schließen-Button (das Kreuz ^^) nutzen zu können. Im Moment schließt sich halt alles. Entweder ich steh da total auf´m Schlauch, was öfters vor kommt, oder es ist kompliziert ^^.

    Gebt mir bitte mal einen Tip. GUISwitch klappt nicht

    LG
    MrB

    Einmal editiert, zuletzt von MrB (14. Oktober 2012 um 14:00)

  • Mit extended-GUIGetMsg. ;)

    [autoit]


    $hGUI1 = GUICreate("GUI 1")
    $hButton1 = GUICtrlCreateButton("Button",0,0)
    GUISetState()
    $hGUI2 = GUICreate("GUI 2")
    $hButton2 = GUICtrlCreateButton("Button",0,0)
    GUISetState()

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

    While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
    Case $hGUI1
    Switch $aMsg[0]
    Case $hButton1
    MsgBox(0,"","Button von GUI 1 wurde gedrückt!")
    Case -3 ;GUI_EVENT_CLOSE
    MsgBox(0,"","GUI 1 wird geschlossen!")
    GUIDelete($hGUI1)
    EndSwitch
    Case $hGUI2
    Switch $aMsg[0]
    Case $hButton2
    MsgBox(0,"","Button von GUI 2 wurde gedrückt!")
    Case -3 ;GUI_EVENT_CLOSE
    MsgBox(0,"","GUI 2 wird geschlossen!")
    GUIDelete($hGUI2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    lg chess

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $h_GUI, $h_Child, $a_Msg

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

    $h_GUI = GUICreate('parent', 400, 300)
    $h_Child = GUICreate('child', 300, 200, -1, -1, Default, Default, $h_GUI)
    GUISetState(@SW_SHOW, $h_GUI)
    GUISetState(@SW_SHOW, $h_Child)

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

    While True
    $a_Msg = GUIGetMsg(1) ; <!--
    Switch $a_Msg[0]
    Case $GUI_EVENT_CLOSE
    Switch $a_Msg[1]
    Case $h_GUI
    Exit
    Case $h_Child
    GUIDelete($h_Child)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Und im OnEvent.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Gui1 = GUICreate("Erste GUI", 200, 200, -1, -1)
    $Button1_1 = GUICtrlCreateButton("Zweite GUI sichtbar", 10, 30, 120, 25)
    $Button1_2 = GUICtrlCreateButton("Zweite GUI verstecken", 10, 80, 120, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()

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

    $Gui2 = GUICreate("Zweite GUI", 200, 200, -1, -1)
    $Button2_1 = GUICtrlCreateButton("Erste GUI sichtbar", 10, 30, 120, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Button2_2 = GUICtrlCreateButton("Erste GUI verstecken", 10, 80, 120, 25)
    GUISetState(@SW_HIDE)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $Gui1)
    GUICtrlSetOnEvent($Button1_1, "_SecondGuiOpen")
    GUICtrlSetOnEvent($Button1_2, "_SecondGuiClose")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SecondGuiClose", $Gui2)
    GUICtrlSetOnEvent($Button2_1, "_FirstGuiOpen")
    GUICtrlSetOnEvent($Button2_2, "_FirstGuiClose")

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

    While 1
    Sleep(10)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _SecondGuiOpen()
    GUICtrlSetState($Button1_1, $GUI_DISABLE)
    GUICtrlSetState($Button1_2, $GUI_ENABLE)
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    WinMove($Gui1, "", $aPos1[0] - 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] + 108, $aPos2[1])
    GUISetState(@SW_SHOW, $Gui2)
    EndFunc

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

    Func _SecondGuiClose()
    GUICtrlSetState($Button1_2, $GUI_DISABLE)
    GUICtrlSetState($Button1_1, $GUI_ENABLE)
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    WinMove($Gui1, "", $aPos1[0] + 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] - 108, $aPos2[1])
    GUISetState(@SW_HIDE, $Gui2)
    GUISetState(@SW_SHOW, $Gui1)
    EndFunc

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

    Func _FirstGuiOpen()
    GUICtrlSetState($Button2_1, $GUI_DISABLE)
    GUICtrlSetState($Button2_2, $GUI_ENABLE)
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    WinMove($Gui1, "", $aPos1[0] - 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] + 108, $aPos2[1])
    GUISetState(@SW_SHOW, $Gui1)
    EndFunc

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

    Func _FirstGuiClose()
    GUICtrlSetState($Button2_2, $GUI_DISABLE)
    GUICtrlSetState($Button2_1, $GUI_ENABLE)
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    WinMove($Gui1, "", $aPos1[0] + 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] - 108, $aPos2[1])
    GUISetState(@SW_HIDE, $Gui1)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    @m-obi
    Deine Variante ist aber recht aufwändig und wirkt unübersichtlich.
    Kürzer tuts auch. ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Gui1 = GUICreate("Erste GUI", 200, 200, -1, -1)
    $Button1 = GUICtrlCreateButton("Zweite GUI zeigen", 10, 30, 120, 25)
    GUISetState()

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

    $Gui2 = GUICreate("Zweite GUI", 200, 200, -1, -1)
    $Button2 = GUICtrlCreateButton("Zurück zu GUI_1", 10, 30, 120, 25)
    GUISetState(@SW_HIDE)

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

    GUISetOnEvent(-3, '_close', $Gui1)
    GUISetOnEvent(-3, '_close', $Gui2)
    GUICtrlSetOnEvent($Button1, '_clickButton')
    GUICtrlSetOnEvent($Button2, '_clickButton')

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

    While 1
    Sleep(100)
    WEnd

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

    Func _close()
    Switch @GUI_WinHandle
    Case $Gui1
    Exit
    Case $Gui2
    GUISetState(@SW_HIDE, $Gui2)
    EndSwitch
    EndFunc

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

    Func _clickButton()
    Switch @GUI_CtrlId
    Case $Button1
    GUISetState(@SW_SHOW, $Gui2)
    Case $Button2
    GUISetState(@SW_HIDE, $Gui2)
    EndSwitch
    EndFunc

    [/autoit]
  • naja gut, ich hatte es rausgekramt aus meiner Kiste.
    Ist nen älteres Script^^
    Aber deins macht auch nicht ganz dasselbe wie meins ;)

    Wenn dann so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Gui1 = GUICreate("Erste GUI", 200, 200, -1, -1)
    $Button1_1 = GUICtrlCreateButton("Zweite GUI sichtbar", 10, 30, 120, 25)
    GUICtrlSetOnEvent(-1, "_Button")
    $Button1_2 = GUICtrlCreateButton("Zweite GUI verstecken", 10, 80, 120, 25)
    GUICtrlSetOnEvent(-1, "_Button")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()

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

    $Gui2 = GUICreate("Zweite GUI", 200, 200, -1, -1)
    $Button2_1 = GUICtrlCreateButton("Erste GUI sichtbar", 10, 30, 120, 25)
    GUICtrlSetOnEvent(-1, "_Button")
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Button2_2 = GUICtrlCreateButton("Erste GUI verstecken", 10, 80, 120, 25)
    GUICtrlSetOnEvent(-1, "_Button")
    GUISetState(@SW_HIDE)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $Gui1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $Gui2)

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

    While 1
    Sleep(10)
    WEnd

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

    Func _Close()
    Switch @GUI_WinHandle
    Case $Gui1
    Exit
    Case $Gui2
    GUICtrlSetState($Button1_2, $GUI_DISABLE)
    GUICtrlSetState($Button1_1, $GUI_ENABLE)
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    WinMove($Gui1, "", $aPos1[0] + 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] - 108, $aPos2[1])
    GUISetState(@SW_HIDE, $Gui2)
    GUISetState(@SW_SHOW, $Gui1)
    EndSwitch
    EndFunc

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

    Func _Button()
    $aPos1 = WinGetPos($Gui1)
    $aPos2 = WinGetPos($Gui2)
    Switch @GUI_CtrlId
    Case $Button1_1
    GUICtrlSetState($Button1_1, $GUI_DISABLE)
    GUICtrlSetState($Button1_2, $GUI_ENABLE)
    WinMove($Gui1, "", $aPos1[0] - 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] + 108, $aPos2[1])
    GUISetState(@SW_SHOW, $Gui2)
    Case $Button1_2
    GUICtrlSetState($Button1_2, $GUI_DISABLE)
    GUICtrlSetState($Button1_1, $GUI_ENABLE)
    WinMove($Gui1, "", $aPos1[0] + 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] - 108, $aPos2[1])
    GUISetState(@SW_HIDE, $Gui2)
    GUISetState(@SW_SHOW, $Gui1)
    Case $Button2_1
    GUICtrlSetState($Button2_1, $GUI_DISABLE)
    GUICtrlSetState($Button2_2, $GUI_ENABLE)
    WinMove($Gui1, "", $aPos1[0] - 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] + 108, $aPos2[1])
    GUISetState(@SW_SHOW, $Gui1)
    Case $Button2_2
    GUICtrlSetState($Button2_2, $GUI_DISABLE)
    GUICtrlSetState($Button2_1, $GUI_ENABLE)
    WinMove($Gui1, "", $aPos1[0] + 108, $aPos1[1])
    WinMove($Gui2, "", $aPos2[0] - 108, $aPos2[1])
    GUISetState(@SW_HIDE, $Gui1)
    EndSwitch
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von m-obi (10. Oktober 2012 um 11:47)

  • Dank euch allen. Funktioniert alles bestestens.

    Kann mir grad noch einer verraten, wie ich ein Edit dazu bekomme keine waagerechte Scrollleiste sondern nur eine senkrechte Scrolleiste zu haben ? Edit nur deshalb, da Text da raus kopiert werden soll und es senkrecht scrollbar sein soll.

    • Offizieller Beitrag

    Schau Dir mal in der Hilfe den Default-Style an:

    Zitat

    default ( -1) : $ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL


    Wenn Du nun keine horizontale Scrollleiste haben möchtest, dann musst Du den Style entsprechend ohne $WS_HSCOLL setzen.
    Zum Beispiel nur: $ES_AUTOVSCROLL + $WS_VSCROLL wie im Scriptbeispiel zu GUICtrlCreateEdit.