Tray in einer Schleife in allen GUIs

  • Abend^^

    Alsoo.... Ich hab 1 HauptGUI ($1GUI) mit meinem Tray zusammen in einer Schleife

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("TrayMenuMode", 1)

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

    Global $1GUI, $2GUI, $3GUI

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

    $1GUI = GuiCreate("1. GUI", 400, 400)

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

    ; Tray Menü
    $gui1 = TrayCreateItem("1. GUI")
    $gui2 = TrayCreateItem("2. GUI")
    $gui3 = TrayCreateItem("3. GUI")
    $exititem = TrayCreateItem("Exit")

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

    ; Buttons
    $btn1 = GUICtrlCreateButton("Button 1", 150, 150, 80, 30)

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

    GuiSetState()

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

    TraySetState()

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

    While 1
    $nMsg = GUIGetMsg()
    $traymsg = TrayGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    MsgBox(64, "Test1", "Das ist der erste Button")
    EndSwitch
    Switch $traymsg
    Case $gui1
    GuiSetState(@SW_SHOW, $1GUI)
    Case $gui2
    GuiSetState(@SW_HIDE, $1GUI)
    _gui2()
    Case $gui3
    GuiSetState(@SW_HIDE, $1GUI)
    _gui3()
    Case $exititem
    Exit
    EndSwitch
    WEnd

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

    Func _gui2()

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

    $2GUI = GuiCreate("2. GUI", 400, 400)

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

    $btn2 = GUICtrlCreateButton("Button 2", 150, 150, 80, 30)

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

    GuiSetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    GuiSetState(@SW_HIDE, $2GUI)
    ExitLoop
    Case $btn2
    MsgBox(64, "Test2", "Das ist der zweite Button")
    EndSwitch
    WEnd
    EndFunc

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

    Func _gui3()
    $3GUI = GuiCreate("3. GUI", 400, 400)

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

    $btn3 = GUICtrlCreateButton("Button 3", 150, 150, 80, 30)

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

    GuiSetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    GuiSetState(@SW_HIDE, $3GUI)
    ExitLoop
    Case $btn3
    MsgBox(64, "Test3", "Das ist der dritte Button")
    EndSwitch
    WEnd
    EndFunc

    [/autoit]

    Mein Problem ist jetzt aber, dass wenn ich im zweiten($2Gui) und Dritten($3GuI) GUI bin, dann funktioniert mein Tray nicht mehr bis ich wieder im HauptGUI ($1GUI) bin. Kann mir da vllt jemand mit ein paar Beispielen weiter helfen?

    2 Mal editiert, zuletzt von Sora White Dragon (8. Dezember 2010 um 22:53)

  • Bitte einmal das gesamte Script posten, mit diesem Schnipsel kann man absolut gar nichts aussagen.

    Hab meinen 1. Beitrag jetzt editiert. Müsste jetzt also verständlicher sein^^

  • Kann auch nicht gehn, weil du für jede gui eine eigene Schleife hast und somit traygetmsg nur abgefragt wird wenn die anderen beiden guis beendet wurden und das Programm wieder in deine Hauptschleife zurückkehrt.

    Du kannst also folgendes machen:

    a) traygetmsg in jeder der 3 schleifen aufnehmen
    b) um dir schreibarbeit zu sparen traygetmsg und die darauf folgende aktion in eine Funktion auslagern die du dann aus allen 3 schleifen aufrufst
    c) am besten wäre es jedoch wenn du anstelle von 3 schleifen nur eine benutzt. und in dieser die Nachrichten aller gui's und deren elemente abfragst (siehe dazu advanced mode in der Hilfe von guigetmsg)

    Einmal editiert, zuletzt von misterspeed (8. Dezember 2010 um 19:58)

  • Hallo Sora White Dragon,

    falls du im GuiGetMsg-Modus weitermachen wills ist es am einfachsten mit

    [autoit]

    GuiGetMsg(1);Advanced-Modus

    [/autoit]

    in nur 1 Schleife. Das würde dann so aussehen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("TrayMenuMode", 1)

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

    Global $1GUI, $2GUI, $3GUI

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

    $1GUI = GUICreate("1. GUI", 400, 400)

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

    ; Tray Menü
    $gui1 = TrayCreateItem("1. GUI")
    $gui2 = TrayCreateItem("2. GUI")
    $gui3 = TrayCreateItem("3. GUI")
    $exititem = TrayCreateItem("Exit")

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

    ; Buttons
    $btn1 = GUICtrlCreateButton("Button 1", 150, 150, 80, 30)

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

    GUISetState()

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

    $2GUI = GUICreate("2. GUI", 400, 400)

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

    $btn2 = GUICtrlCreateButton("Button 2", 150, 150, 80, 20)

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

    GUISetState(@SW_HIDE)

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

    $3GUI = GUICreate("3. GUI", 400, 400)

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

    $btn3 = GUICtrlCreateButton("Button 3", 150, 150, 80, 30)

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

    GUISetState(@SW_HIDE)
    TraySetState()

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

    While 1
    $nMsg = GUIGetMsg(1)
    $traymsg = TrayGetMsg()
    Switch $nMsg[1] ;von welcher Gui????
    Case $1gui ;von 1. Gui
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    MsgBox(64, "Test1", "Das ist der erste Button")
    EndSwitch
    Case $2gui ;von 2. Gui
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $1GUI)
    GUISetState(@SW_HIDE, $2GUI)
    Case $btn2
    MsgBox(64, "Test2", "Das ist der zweite Button")

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

    EndSwitch
    Case $3gui ;von 3. Gui
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $1GUI)
    GUISetState(@SW_HIDE, $3GUI)
    Case $btn3
    MsgBox(64, "Test3", "Das ist der dritte Button")
    EndSwitch
    EndSwitch
    Switch $traymsg
    Case $gui1
    GUISetState(@SW_SHOW, $1GUI)
    GUISetState(@SW_HIDE, $2GUI)
    GUISetState(@SW_HIDE, $3GUI)
    Case $gui2
    GUISetState(@SW_SHOW, $2GUI)
    GUISetState(@SW_HIDE, $1GUI)
    GUISetState(@SW_HIDE, $3GUI)
    Case $gui3
    GUISetState(@SW_SHOW, $3GUI)
    GUISetState(@SW_HIDE, $1GUI)
    GUISetState(@SW_HIDE, $2GUI)
    Case $exititem
    Exit
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

  • Yey, es funzt jetzt. Danke euch allen :thumbup:
    Hab ja jetzt auch genug Varianten zur Auswahl :D