Gui schliessen

  • Hallo,

    ich haben folgendes Problem:

    Mein Script legt mehrere Fenster an. Jedes Fenster hat einen
    anderen Titel aber ein X Schliess-Symbol.

    Das Problem: Wenn ich ein Fenster schliesse, werden alle beendet.

    Ich glaube das Problem liegt an der Schleife.

    [autoit]


    Do
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $button
    Case $GUI_EVENT_CLOSE

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

    Case $listview

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

    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Die Titel des Fensters werden so generiert:

    [autoit]


    GUICreate($Tiere[0], 800, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)

    [/autoit]

    Von diesen Fenstern gibt es viele.

    Hoffe Ihr habt ne Idee

    Liebe Grüße
    ;) Ilse

    3 Mal editiert, zuletzt von Ilse (4. Juni 2012 um 21:34)

  • Mit dem "advanced" Paramter von GUIGetMsg kannst du den Handler des Fenster zurückgeben lassen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 437, 161, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 48, 40, 75, 25)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 437, 161, 292, 324)
    $Edit1 = GUICtrlCreateEdit("", 88, 48, 185, 89)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($nMsg[1])
    EndSwitch
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (4. Juni 2012 um 09:24)

  • Hallo Chip,

    noch ne Frage:

    Ich kann nun alle Fenster schliessen.
    Wie kann man aber verhindern daß wenn das
    letzte Fenster geschlossen wird nicht das ganze Script beendet wird.

    ;) Grüße
    Ilse

    • Offizieller Beitrag

    Meiner Meinung nach, ist es (bei mehreren Fenstern) einfacher den OnEventMode zu verwenden.
    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    Global $ahGui[5]

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

    For $i = 0 To UBound($ahGui) - 1
    $ahGui[$i] = GUICreate('Test' & $i, 640, 480)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Next

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

    For $i = 0 To UBound($ahGui) - 1
    ConsoleWrite('öffne Fenster Nr.' & $i & @cr)
    GUISetState(@SW_SHOW, $ahGui[$i])
    WinWaitClose($ahGui[$i])
    Next

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

    Func _CloseGui()
    GUIDelete(@GUI_WinHandle)
    EndFunc

    [/autoit]
  • Hallo zusammen,

    krieg das nicht zum laufen.
    Kurze Info zum Script
    (Lann leider nur den Ausschnitt posten....sehr komplex)

    Also:

    1. Es gibt eine Hauptdatei (läuft...)
    2. es gibt eine Func mit einer Schleife (hier werden die Gui Fenster gemacht!

    Alles alleine läuft, nur zusammen nicht!

    Das ist die Schleife der Hauptgui:

    [autoit]


    #include "Guifenster.au3" ; meine Funktion
    ; Haupt Gui

    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle

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

    Case $GUI_Main ; Gui Fenster 1
    Case $GUI_EVENT_CLOSE
    GUIDelete($Msg[1])
    Exit

    Case $Navi ; Gui Fenster 2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE

    EndSwitch
    EndSwitch
    WEnd

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

    Das ist die Funktion die in der Func diese Schleife hat

    [autoit]


    Func _Guis()

    GUICreate($Tiere[0], 800, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    ;Code....
    ;Code...

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

    While 1
    $umsg = GUIGetMsg(1)

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

    Switch $uMsg[0]
    Case $button

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

    Case $GUI_EVENT_CLOSE

    GUIDelete($uMsg[1])

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

    EndSwitch
    wend

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

    EndFunc

    [/autoit]

    Komisch ist, ich kann die Fenster einzeln schliessen,
    aber ich kann z.B. die Navi Gui nicht mehr ansprechen
    Ich krieg diese nicht mehr aktiv
    (winactivate... keine Chance

    Lasse ich z.B. die Funktion weg, dann geht das!

    :( Grüße Ilse

  • Bei der Nav-Gui ist ja auch kein Befehl nach $GUI_EVENT_CLOSE.
    Probier mal so:

    [autoit]

    #include "Guifenster.au3"

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $GUI_Main ; Gui Fenster 1
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($GUI_Main)
    Case $Navi ; Gui Fenster 2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($Navi)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]


    Aber der OnEvent-Mode würde da besser passen.

    Einmal editiert, zuletzt von m-obi (4. Juni 2012 um 15:14)

  • Hallo m-obi,

    hab ich probiert, geht nicht!

    Werd bald wahnsinnig. Ich sitze nun schon seit Stunden an diesem Problem.

    Die Hauptgui und die Navi Gui alleine laufen.
    Ich kann diese auch ansprechen alles geht.

    Sobald aber die Function mit den Guis dazukommt
    "scheint vorerst ales zu gehen"
    Ich kann die Fenster die mit der Funktion erzeugt wurden auch schliessen. ABER ich komme dann nicht mehr an meine
    Main und NaviGUI!
    Die sind noch geöffnet, auch die Hotkeys die vorher liefen funktionieren nicht mehr für die Guis!
    Auch wenn ich diese Anklicke sind sie nicht mehr aktiv!

    Das hat bestimmt was mit dem Loop in meiner Funktion zu tun....
    aber ich weiß nicht woran es hängt!

    :( Grüße Ilse

  • Ist ja auch klar, weil aus der Funktion nichtmehr rauskommst. Du müsstes einfach die komplette While aus deiner Funktion raus hauen und das ganze in die Hauptwhile der Hauptgui rein. Oder eine counter rein der die While in der Func beendet sobald alle darin erstellen GUIs geschlossen wurden.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo Chip,

    hatte ich auch versucht hat aber irgendwie nichtr funktioniert.

    - Also die Funktion darf keine While Schleife haben

    Ich hatte die Case Anwendungen kopiert...

    hm....?
    eine harte Nuss heute...

    :( Grüße Ilse

  • Hallo Chip,

    ich habe nun folgendes Ergebnis:

    Ich kann nun meine Guis anklicken,
    aber die Fenster lassen sich nicht schliessen.

    Hier mal die While Schleife mit der Schleife der Funktion.
    Also die Funktion hat nun keine Schleife mehr.

    Nur die Hauptgui

    [autoit]


    While 1

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

    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle

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

    Case $GUI_Main
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    GUIDelete($GUI_Main)
    Exit
    Case $idcbo

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

    Case $cDummy1

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

    Case $cDummy2

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

    Case $cDummy3

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

    Case $txtSuche

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

    Case $Navi ; Gui
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($Navi)
    Case $NaviDummy1

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

    Case $NaviDummy2

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

    Case $lblNavi

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

    endif

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

    EndSwitch

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

    Switch $msg[0] ; Funktion
    Case $button

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

    Case $GUI_EVENT_CLOSE
    GUIDelete($msg[1])

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

    Case $listview

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

    EndSwitch

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

    EndSwitch

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

    WEnd

    [/autoit]


    Und so wird die Gui mit der Funktion gemacht!
    Per Hotkey F6 wird diese Gui angelegt!

    [autoit]


    GUICreate("test", 800, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)

    [/autoit]

    Also mehrere Gui-Fenster. Und die kann ich in der Hauptgui nicht schliessen!


    Liebe Grüße

    :( Ilse

  • Probiers es eso:

    Spoiler anzeigen
    [autoit]

    While 1

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

    $msg = GUIGetMsg(1)
    Switch $msg[0] ; Window Handle
    Case $GUI_EVENT_CLOSE
    GUIDelete($msg[1])
    Case $idcbo

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

    Case $cDummy1

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

    Case $cDummy2

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

    Case $cDummy3

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

    Case $txtSuche

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

    Case $NaviDummy1

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

    Case $NaviDummy2

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

    Case $lblNavi

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

    Case $button

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

    Case $listview

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

    EndSwitch

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

    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Also Ilse du musst dir echt nochmal die Switch-Anweisung und GUIGetMsg zu Gemüte führen. Was soll denn das dritte Switch? Das ist doch dasselbe wie das davor.

  • Hallo,

    ...ich hab's!

    DANKE...Allen!

    Ich hatte mir ein Beispiel mit mehreren Guis angesehen.
    Dort wurde alles mit Switch...mehrfach angesprochen und beendet.

    Und das hat mit irgendwie total auf's Glatteis geführt.
    Dafür mußte ich ein TAG kämpfen.


    Liebe Grüße
    ;) Ilse