Problem mit GUISetState

  • Hallo Forumsmitglieder, 8o

    bisher konnte ich durch lesen im Forum sehr viel lernen. Heute will ich mal vom lesenden in den schreibenden Status wechseln.
    Ich arbeite an einem Skript zum installieren/Einrichten von Programmen.
    Nun zu meinem Problem:

    ich möchte, dass nach dem beenden der Func das Hauptmenü und nicht das Auswahlmenü angezeigt wird.

    Man könnte man einen zurück button einfügen, aber welche Anweisung müßte da hinterlegt sein?

    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 0)
    $frmMain = GUICreate("Forum", 625, 445, 193, 125)
    $Label1 = GUICtrlCreateLabel("Hauptmenü", 225, 24, 450, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Auswahl 1", 78, 96, 175, 33, 0)
    $Button2 = GUICtrlCreateButton("Auswahl 2", 384, 96, 175, 33, 0)
    $Button3 = GUICtrlCreateButton("3", 78, 160, 175, 33, 0)
    $Button4 = GUICtrlCreateButton("4", 384, 160, 175, 33, 0)
    $Button5 = GUICtrlCreateButton("5", 78, 224, 175, 33, 0)
    $Button6 = GUICtrlCreateButton("6", 384, 224, 175, 33, 0)
    $Button7 = GUICtrlCreateButton("Schließen", 350, 304, 155, 65, 0)

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

    $Gui1=GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUISetState(@SW_HIDE)
    _Abfrage1()
    GUISetState(@SW_SHOW)
    Case $Button2
    GUISetState(@SW_SHOW)
    _Abfrage2()
    GUISetState(@SW_SHOW)
    Case $Button3
    GUISetState(@SW_HIDE)
    _mglk3()
    GUISetState(@SW_SHOW)
    Case $Button4
    GUISetState(@SW_SHOW)
    _mglk4()
    GUISetState(@SW_SHOW)
    Case $Button5
    GUISetState(@SW_HIDE)
    _mglk5()
    GUISetState(@SW_SHOW)
    Case $Button6
    GUISetState(@SW_SHOW)
    _mglk6()
    Case $Button7
    Exit

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

    EndSwitch
    WEnd

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

    Func _Abfrage1()
    $frmMain = GUICreate('Auswahl 1', 215, 50)
    $Button1 = GUICtrlCreateButton('Prog 1', 10, 10, 90, 30)
    $Button2 = GUICtrlCreateButton('Prog 2', 110, 10, 90, 30)
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUISetState(@SW_HIDE)
    _mglk1()
    GUISetState(@SW_SHOW);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    Case $Button2
    GUISetState(@SW_HIDE)
    _mglk2()
    GUISetState(@SW_SHOW);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    EndSwitch
    WEnd
    EndFunc ;_Abfrage1

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

    Func _Abfrage2()
    $frmMain = GUICreate('Auswahlmenue', 215, 50)
    $Button1 = GUICtrlCreateButton('Progr 3', 10, 10, 90, 30)
    $Button2 = GUICtrlCreateButton('Progr 4', 110, 10, 90, 30)
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUISetState(@SW_HIDE)
    _mglk3()
    GUISetState(@SW_SHOW);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    Case $Button2
    GUISetState(@SW_HIDE)
    _mglk4()
    GUISetState(@SW_SHOW);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    EndSwitch
    WEnd
    EndFunc ;_Abfrage2

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

    Func _mglk1()
    MsgBox(0,'','Möglichkeit 1')
    EndFunc

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

    Func _mglk2()
    MsgBox(0,'','Möglichkeit 2')
    EndFunc

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

    Func _mglk3()
    MsgBox(0,'','Möglichkeit 3')
    EndFunc

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

    Func _mglk4()
    MsgBox(0,'','Möglichkeit 4')
    EndFunc

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

    Func _mglk5()
    MsgBox(0,'','Möglichkeit 5')
    EndFunc

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

    Func _mglk6()
    MsgBox(0,'','Möglichkeit 6')
    EndFunc

    [/autoit]

    MfG Jescho

    Jeder hat mal klein angefangen - aber nicht jeder kommt groß raus!

    Einmal editiert, zuletzt von Jescho (24. November 2009 um 21:55)

    • Offizieller Beitrag

    Du mußt den 2.Parameter von GUISetState benutzen. Wenn du das Winhandle nicht angibst wird immer das aktuelle benutzt.
    Winhandle wäre dann der Variablenname von GUICreate.

    Edit: Dein Script hat viele Fehler. Z.B. benutzt du für alle GUI´s den selben Variablennamen. Die Buttons haben in allen GUI´s auch teilweise die selben Namen. Gewöhne dir an, immer Unterschiedliche Namen zu benutzen.

  • Die magischen Worte sind GUISetState's 2ter Parameter ( wie von Raupi schon erwähnt )
    und Erweiterter GUIgetMsg Mode. Dann brauchst du nicht 600 schleifen, sondern nur eine. Siehe hier:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 0)
    $frmMain = GUICreate("Forum", 625, 445, 193, 125)
    $Label1 = GUICtrlCreateLabel("Hauptmenü", 225, 24, 450, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Auswahl 1", 78, 96, 175, 33, 0)
    $Button2 = GUICtrlCreateButton("Auswahl 2", 384, 96, 175, 33, 0)
    $Button3 = GUICtrlCreateButton("3", 78, 160, 175, 33, 0)
    $Button4 = GUICtrlCreateButton("4", 384, 160, 175, 33, 0)
    $Button5 = GUICtrlCreateButton("5", 78, 224, 175, 33, 0)
    $Button6 = GUICtrlCreateButton("6", 384, 224, 175, 33, 0)
    $Button7 = GUICtrlCreateButton("Schließen", 350, 304, 155, 65, 0)

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

    ; Abfrage 1
    $Abfrage1 = GUICreate('Auswahl 1', 215, 50)
    $1_Button1 = GUICtrlCreateButton('Prog 1', 10, 10, 90, 30)
    $1_Button2 = GUICtrlCreateButton('Prog 2', 110, 10, 90, 30)
    ; Abfrage 2
    $Abfrage2 = GUICreate('Auswahl 2', 215, 50)
    $2_Button1 = GUICtrlCreateButton('Progr 3', 10, 10, 90, 30)
    $2_Button2 = GUICtrlCreateButton('Progr 4', 110, 10, 90, 30)

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

    GUISetState(@SW_SHOW,$frmMain)
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1] ; Fenster
    Case $frmMain
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUISetState(@SW_HIDE,$frmMain)
    _Abfrage1()
    Case $Button2
    GUISetState(@SW_HIDE,$frmMain)
    _Abfrage2()
    Case $Button3
    GUISetState(@SW_HIDE,$frmMain)
    _mglk3()
    Case $Button4
    GUISetState(@SW_HIDE,$frmMain)
    _mglk4()
    Case $Button5
    GUISetState(@SW_HIDE,$frmMain)
    _mglk5()
    Case $Button6
    GUISetState(@SW_HIDE,$frmMain)
    _mglk6()
    Case $Button7
    Exit
    EndSwitch
    Case $Abfrage1
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Abfrage1)
    GUISetState(@SW_SHOW,$frmMain)
    Case $1_Button1
    GUISetState(@SW_HIDE,$Abfrage1)
    _mglk1()
    GUISetState(@SW_SHOW,$frmMain);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    Case $1_Button2
    GUISetState(@SW_HIDE,$Abfrage1)
    _mglk2()
    GUISetState(@SW_SHOW,$frmMain);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    EndSwitch
    Case $Abfrage2
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Abfrage2)
    GUISetState(@SW_SHOW,$frmMain)
    Case $2_Button1
    GUISetState(@SW_HIDE,$Abfrage1)
    _mglk3()
    GUISetState(@SW_SHOW,$frmMain);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    Case $2_Button2
    GUISetState(@SW_HIDE,$Abfrage1)
    _mglk4()
    GUISetState(@SW_SHOW,$frmMain);hier soll nicht das vorherige sondern das Hauptfenster wiederhergestellt werden
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Abfrage1()
    GUISetState(@SW_SHOW,$Abfrage1)
    EndFunc ;_Abfrage1

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

    Func _Abfrage2()
    GUISetState(@SW_SHOW,$Abfrage2)
    EndFunc ;_Abfrage2

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

    Func _mglk1()
    MsgBox(0,'','Möglichkeit 1')
    EndFunc

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

    Func _mglk2()
    MsgBox(0,'','Möglichkeit 2')
    EndFunc

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

    Func _mglk3()
    MsgBox(0,'','Möglichkeit 3')
    EndFunc

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

    Func _mglk4()
    MsgBox(0,'','Möglichkeit 4')
    EndFunc

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

    Func _mglk5()
    MsgBox(0,'','Möglichkeit 5')
    EndFunc

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

    Func _mglk6()
    MsgBox(0,'','Möglichkeit 6')
    EndFunc

    [/autoit]
  • Danke :rock: funktioniert tadellos

    ja ich habe so etwas schon vermutet. Nur leider konnte ich die Hilfe nicht richtig deuten. Aber ich lerne ja noch.
    Raupi
    Deinen für Deinen Tipp.

    MfG Jescho

    Jeder hat mal klein angefangen - aber nicht jeder kommt groß raus!