unter Case kein weiteres GUI fenster möglich?

  • Also ich bin noch ziemlich neu in Autoit, und hab heut mal ein wenig rumexperiementiert.

    Wolte dann mal einfach aus jux was schreiben was auf Knopfdruck bestimmte sachen öffnet, icq und einfach eine normale MsgBox.

    Hab dann eine Function geschrieben, mit While, und dann Select, und dann bei einem Case soll ein weiteres GUI fenster geöffnet werden.
    Ist das überhaupt möglich?

    Und hier is nochmal der Code, zeigt beim Compilen noch ein paar fehler an, die ich nicht so recht zu beheben weis.

    Spoiler anzeigen

    Danke schonmal für eure Hilfe.

    mfg

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    $gui1 = GUICreate('GUI 1', 500, 300, -1, -1)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)

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

    $gui2 = GUICreate('GUI 2', 500, 300, -1, -1)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; window-handle
    Case $gui1
    Switch $msg[0] ; event/control-handle
    Case $button1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $button2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]


    hier, ich hab grad in meinen dateien ein beispiel für 2 gui´s gefunden^^

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • PCKing: Ich würde das Beispiel allerdings so schreiben: das ist mE nach übersichtlicher.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    $gui1 = GUICreate('GUI 1', 500, 300, 100, 100)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)

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

    $gui2 = GUICreate('GUI 2', 500, 300, 500, 500)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1) ; Advanced GUIGetMsg()-Mode (s. Hilfe)
    Switch $msg[0] ; Ereignis
    Case $button1
    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_HIDE, $gui1)
    Case $button2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $GUI_EVENT_CLOSE
    Switch $msg[1] ; Fenster
    Case $gui2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $gui1
    Exit
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Also, ich hab mal die beiden codes benutzt die ihr hier gepostet habt, und das was ich wollte einigermaßen umgesetzt und verstanden,
    Doch wenn ich nun das zweite Gui hab und zurück zum ersten will, stürzt das Programm ab / hängt sich auf und ich muss es in der Taskleiste beenden.

    Hier mal wieder der Code, ich kann keine Großartigen Fehler feststellen, der Compiler meckert auch nicht.
    Und was war an meinem Ursprungscode Falsch? Ich hab die Func-funktion mal aus der Func-funktion rausgenommen, und der Compiler hat nix mehr gesagt, doch das Programm hat nicht gestartet.

    Hier der, der Startet, also der von euch (ein wenig abgeändert)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt('GUICoordMode', 2)
    $gui1 = GUICreate('GUI 1', 500, 300, -1, -1)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)
    $button3 = GUICtrlCreateButton('ICQ starten', 40, -1)
    $but_ext1 = GUICtrlCreateButton('Exit', 60, -1)

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

    $gui2 = GUICreate('GUI 2', 500, 300, -1, -1)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)
    $button4 = GUICtrlCreateButton('MSG BOX', 40, -1)
    $but_ext2 = GUICtrlCreateButton('Exit', 60, -1)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; window-handle
    Case $gui1
    Switch $msg[0] ; event/control-handle
    Case $button3
    Run("C:\Program Files\ICQ7.0\ICQ.exe")
    Case $button1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    Case $but_ext1
    Exit
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $button2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $button4
    MsgBox(0, 'Test', 'Test')
    Case $but_ext2
    Exit
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Hier nochmal meiner.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <array.au3>

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

    Opt('MustDeclareVars', 1)

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

    Func Test()
    Local $button01, $button02, $button03
    Local $msg
    Local $button04, $button05
    Local $gui, $gui2

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

    $gui = GUICreate("GUI Fenster", 500, 300, -1, -1)

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

    $gui2 = GUICreate("GUI CHECK EXIT", 500, 300, -1, -1)

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

    Opt("GUICoordMode", 2)
    $button01 = GUICtrlCreateButton("Test button 1", 0, -1)
    $button02 = GUICtrlCreateButton("Test button 2", 0, -1)
    $button03 = GUICtrlCreateButton("Test button 3", 0, -1)

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

    GUISetState(@SW_SHOW, $gui)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg[1]
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $gui
    Run("C:\Program Files\ICQ7.0\ICQ.exe")
    WinWaitActive("ICQ")
    Case $gui2 ;2. Button fenster wird geöffnet

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

    GUISetState(@SW_HIDE, $gui)
    GUISetState(@SW_SHOW, $gui2)

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

    Opt("GUICoordMode", 2)
    $button04 = GUICtrlCreateButton("Test Button", 0, -1)
    $button05 = GUICtrlCreateButton("Test Button2", 0, -1)

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

    GUISetState()
    While 2
    $msg = GUIGetMsg()

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

    Switch $msg[0]
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $button04
    GUISetState(@SW_HIDE, $gui2)
    GUISetState(@SW_SHOW, $gui)
    MsgBox(0, "Test", "Test")
    Case $msg = $button05
    MsgBox(0, "Test", "Test")
    EndSwitch

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

    WEnd
    Case $msg = $button03
    MsgBox(0, "Toll", "Test")

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

    EndSwitch

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

    WEnd
    EndFunc

    [/autoit]

    Danke nochmal für die Hilfe.

    mfg

  • Hallo teido,

    hier einmal das 1. Skript abgeändert nach SEuBo's Vorschlag:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('GUICoordMode', 2)
    $gui1 = GUICreate('GUI 1', 500, 300, -1, -1)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)
    $button3 = GUICtrlCreateButton('ICQ starten', 40, -1)
    $but_ext1 = GUICtrlCreateButton('Exit', 60, -1)

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

    $gui2 = GUICreate('GUI 2', 500, 300, -1, -1)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)
    $button4 = GUICtrlCreateButton('MSG BOX', 40, -1)
    $but_ext2 = GUICtrlCreateButton('Exit', 60, -1)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[0] ;Ereignis abfragen
    Case $button3
    Run("C:\Program Files\ICQ7.0\ICQ.exe")
    Case $button1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    Case $but_ext1
    Exit
    Case $button2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $button4
    MsgBox(0, 'Test', 'Test')
    Case $but_ext2
    Exit
    Case $GUI_EVENT_CLOSE
    Switch $msg[1] ;ID der Gui abfragen
    Case $gui2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $gui1
    Exit
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]


    Das gleiche im OnEvent-Modus (den ich bevorzuge):

    Spoiler anzeigen
    [autoit]


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

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

    Opt('GUIOnEventMode', 1)

    [/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_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" rechts 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_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" rechts 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_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" rechts 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')
    ;Beim Klicken des Buttons wird die Funktion _BackToGui1 aufgerufen

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

    $cidButton2 = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    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)
    GUICtrlSetOnEvent(-1, '_BackToGui1')
    ;Beim Klicken des Buttons wird die Funktion _BackToGui1 aufgerufen

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

    $cidbtnExit2 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" rechts 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_DISABLE, $cidGui1)
    GUISetState(@SW_SHOW, $cidGui2)
    EndFunc ;==>_CallGui2

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

    Func _RunICQ()
    Run("C:\Program Files\ICQ7.0\ICQ.exe")
    EndFunc ;==>_RunICQ

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

    Func _BackToGui1()
    GUISetState(@SW_ENABLE, $cidGui1)
    GUISetState(@SW_HIDE, $cidGui2)
    EndFunc ;==>_BackToGui1

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

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

    [/autoit]
  • Danke, habs jetz verstanden was ich Falsch gemacht hab.
    Den ersten hab ich mir mal angeguckt und ein wenig damit rumgespielt, klappt jetz auch so wie ich will.

    Den 2. versteh ich nich ganz, den muss ich mir morgen Abend nochmal angucken.

    mfg und danke für die Antwort ;)