mehrere GUI-Fenster

  • Habe folgenden Problem:
    Ich habe in einem GUI-Fenster eingebaut,dass ich ein neues GUI-Fenster des selben Typen öffnen kann. Nur kann ich danach im ersten (ursprünglichen) GUI-Fenster keine Funktionen mehr ausführen, weder minimieren noch ein weiteres (drittes) Fenster öffnen.

    Wie kann ich es erreichen, das ich in allen GUI-Fenstern alle Funktionen ausführen kann?

    (Und vllt. zusätzlich, das wenn ich ein GUI schließe, ichnicht gleich alle schließe - hierbei war ich noch nicht wirklich kreativ in der Lösungsfindung.)

    Wäre toll wenigstens hinweise zu erhalten,wo ich nachschauen kann.
    Danke schonmal

    Spoiler anzeigen

    $Anzahl = 1

    #NoTrayIcon ; Trayicon erstmal verstecken
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <GuiConstants.au3>
    #include <Constants.au3>

    #Region ### TRAY-Menü + Funktionen
    Opt('TrayMenuMode', 1)
    Opt('TrayOnEventMode', 1)
    TrayCreateItem('Wiederherstellen') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_Restore') ; dem Eintrag eine Funktion zuweisen
    TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
    TrayItemSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen
    Func _Restore()
    GUISetState(@SW_SHOW) ; GUI wiederherstellen
    TraySetState(2) ; Trayicon verstecken
    EndFunc ;==>_Restore
    Func _End()
    Exit
    EndFunc ;==>_End
    #EndRegion ###

    #Region ### START Koda GUI section ###
    $oIE = _IECreateEmbedded()
    GUICreate("Heyho", 260, 180, 0, 0, _
    $WS_SYSMENU + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    $MenuItem1 = GUICtrlCreateMenu("Menü")
    $MenuItem2 = GUICtrlCreateMenuitem("Aktualisieren",$MenuItem1)
    $MenuItem3 = GUICtrlCreateMenuitem("Neues Fenster",$MenuItem1)
    $MenuItem4 = GUICtrlCreateMenuitem("Minimieren",$MenuItem1)
    $MenuItem5 = GUICtrlCreateMenuitem("Schließen",$MenuItem1)

    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 300, 200)
    GUICtrlSetPos($GUIActiveX, -10, -39, 360, 260)
    GUICtrlSetStyle($GUIActiveX, $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    GUISetState()
    _IENavigate($oIE, @ScriptDir & "\a.html")
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $GUI_EVENT_MINIMIZE
    TraySetState(1)
    GUISetState(@SW_HIDE, $oIE)
    Case $MenuItem2
    _IEAction($oIE,"refresh")
    Case $MenuItem3
    Call("_Neu")
    Case $MenuItem4
    TraySetState(1)
    GUISetState(@SW_HIDE, $oIE)
    Case $MenuItem5
    GUIDelete()
    Exit
    EndSwitch
    WEnd

    Func _Neu()
    $Anzahl = $Anzahl + 1

    #Region ### START Koda GUI section ###
    $oIE = _IECreateEmbedded()
    GUICreate("Heyho"&$Anzahl, 260, 180, 0, 0, _
    $WS_SYSMENU + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    $MenuItem1 = GUICtrlCreateMenu("Menü")
    $MenuItem2 = GUICtrlCreateMenuitem("Aktualisieren",$MenuItem1)
    $MenuItem3 = GUICtrlCreateMenuitem("Neues Fenster",$MenuItem1)
    $MenuItem4 = GUICtrlCreateMenuitem("Minimieren",$MenuItem1)
    $MenuItem5 = GUICtrlCreateMenuitem("Schließen",$MenuItem1)

    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 300, 200)
    GUICtrlSetPos($GUIActiveX, -10, -39, 360, 260)
    GUICtrlSetStyle($GUIActiveX, $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    GUISetState()
    _IENavigate($oIE, @ScriptDir & "\a.html")
    #EndRegion ### END Koda GUI section ###

    Endfunc

    • Offizieller Beitrag

    Kleines Bsp.:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    Local $gui1, $gui2, $btn1, $btn2, $msg

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

    $gui1 = GUICreate('GUI 1')
    $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)

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

    $gui2 = GUICreate('GUI 2')
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)

    [/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
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd
    GUIDelete($gui1)
    GUIDelete($gui2)

    [/autoit]
  • Nach nunmehr 20h verzweifelter Suche gebe ich es auf und hoffe hier meine Rettung zu finden.

    Zunächst erstmal der Code

    Spoiler anzeigen

    $Anzahl = 1
    Global $IE,$oIE, $Main_GUI, $Child_GUI[100], $gui_index=0
    Global $MenuItem2, $MenuItem3
    #NoTrayIcon ; Trayicon erstmal verstecken
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    #include <Constants.au3>
    #include <GuiMenu.au3>
    #include <EditConstants.au3>
    #include <GuiListBox.au3>
    #include <StructureConstants.au3>
    #include <StaticConstants.au3>

    #Region ### TRAY-Menü + Funktionen
    Opt('TrayMenuMode', 1)
    $parent = TrayCreateItem('Parent öffnen') ; Traymenüeintrag erstellen
    $Wiederherstellen = TrayCreateItem('Alle Childs öffnen') ; Traymenüeintrag erstellen
    $Beenden = TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
    TraySetState()
    #EndRegion ###

    HotKeySet("^{l}", "_Neu")
    HotKeySet("{F5}", "_Refresh")

    ;Koordinaten
    $x = 0
    $y = 0
    Child
    #Region ### START Koda GUI section ### Parent
    $oIE = _IECreateEmbedded()
    $Main_GUI = GUICreate("Parent", 260, 180, $x, $y, _
    $WS_SYSMENU + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    GUICtrlCreateMenu("")
    $MenuItem2 = GUICtrlCreateMenuitem("Aktualisieren",-1)
    $MenuItem3 = GUICtrlCreateMenuitem("Child",-1)

    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 300, 200)
    GUICtrlSetPos($GUIActiveX, -10, -39, 360, 260)
    GUICtrlSetStyle($GUIActiveX, $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)

    GUISetState()
    _IENavigate($oIE, @ScriptDir & "\a.html")
    #EndRegion ### END Koda GUI section ###

    Func _Neu()
    #Region ### START Koda GUI section ### Child
    $Anzahl = $Anzahl+1
    If $x = $x then $x = $x + 50
    If $y = $y then $y = $y + 50
    $IE = _IECreateEmbedded()
    $Child_GUI[$gui_index]=GUICreate("Child"&$Anzahl, 260, 180, $x, $y,$WS_SYSMENU + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    ReDim $Child_GUI[UBound($Child_GUI)+1]
    $gui_index += 1
    $GUIActiveX = GUICtrlCreateObj($IE, 0, 0, 300, 200)
    GUICtrlSetPos($GUIActiveX, -10, -39, 360, 260)
    GUICtrlSetStyle($GUIActiveX, $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    GUISetState()
    _IENavigate($IE, @ScriptDir & "\a.html")
    #EndRegion ### END Koda GUI section ###
    EndFunc


    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    For $i = 0 To UBound($Child_GUI)-2 ;einzeln schließen
    If $msg[1] = $Child_GUI[$i] Then
    GUISwitch($Child_GUI)
    GUIDelete($Child_GUI[$i])
    EndIf
    Next
    If $msg[1] = $main_gui Then ;alle schließen
    GUISwitch($main_gui)
    GUIDelete()
    Exit
    EndIf

    Case $msg[0] = $GUI_EVENT_MINIMIZE ;minimieren - alle in einem Icon vereint
    For $i = 0 To UBound($Child_GUI)-2
    If $msg[1] = $Child_GUI[$i] Then
    GUISwitch($Child_GUI)
    TraySetState(1)
    GUISetState(@SW_HIDE, $Child_GUI[$i])
    EndIf
    Next
    If $msg[1] = $main_gui Then
    GUISwitch($main_gui)
    TraySetState(1)
    GUISetState(@SW_HIDE, $main_gui)
    EndIf

    Case $msg[0] = $MenuItem2 ;Aktualisieren des Parent
    GUISwitch($main_gui)
    _IEAction($oIE,"refresh")

    Case $msg[0] = $MenuItem3 ;Neuer Child
    Call("_Neu")
    EndSelect


    #Region ### TRAY-Menü + Funktionen
    $tmsg = TrayGetMsg()
    Select
    Case $tmsg = $parent
    If $main_gui Then
    GUISwitch($main_gui)
    GUISetState(@SW_SHOW, $main_gui)
    EndIf

    Case $tmsg = $Wiederherstellen
    For $i = 0 To UBound($Child_GUI)-2
    If $Child_GUI[$i] Then
    GUISwitch($Child_GUI)
    GUISetState(@SW_SHOW, $Child_GUI[$i])
    EndIf
    Next

    Case $msg = $Beenden
    GUIDelete()
    Exit
    EndSelect
    #EndRegion ###
    WEnd

    Func _Refresh()

    EndFunc


    Mein Problem stellt das Aktualisieren der Child-Fenster dar. Ich weis nicht wie ich das händeln muss. All meine Versuche endeten darin, dass ich nur das zu Letz geöffnete Child aktualisieren kann und alle vorhergehenden nicht.
    Da ich auch immer unterschiedlich viele Child brauche, möchte ich nicht alles einzeln aufschreiben sondern versuchen zu komprimieren.

    Kann mir jemand bei der Lösung helfen?

    und damit es nicht zu missverständnissen kommt, nochmal konkret
    Ich wünsche mir: Ich kann jedes beliebe Child-Fenster anklicken und mit F5 aktualisieren. Dazu müsste ich ja eig nur wissen, wie ich $IE händeln kann und genau darin liegt mein Problem.

    Wer mir hilft bekommt auch nen virtuellen Keks :D