Weshalb schliessen sich beide Fenster ?

  • Hallo Zusammen

    Möchte das nur dass AboutGui schliesst wenn ich im Fenster About aux X Klicke. Leider schliesst sich aber die ganze Anwendung, Bitte was hab ich da falsch gemacht?.

    Oder solte ich dies in "FuncFenster() und Func AboutGui()" unterteilen ?

    Danke der Hilfe.
    MC


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('MustDeclareVars', 1)
    Fenster()
    ;About()
    Func Fenster()
    Local $hname, $bname, $section0, $section1, $msg, $ButtonMsg, $ButtonEnd, $helpmenu, $aboutitem, $AboutGui, $master
    $master = GUICreate(" GUI ", 200, 250) ; will create a dialog box that when displayed is centered

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

    $helpmenu = GUICtrlCreateMenu("&?")
    $AboutItem = GUICtrlCreateMenuItem("&Über", $helpmenu)

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

    GUICtrlCreateLabel("HostName ", 11, 80)
    $hname = GUICtrlCreateCombo("", 10, 103)

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

    GUICtrlCreateLabel("Muster ", 11, 30)
    $bname = GUICtrlCreateCombo("", 10, 45)

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

    $section0 = IniReadSection("muster.ini", "Muster")
    $section1 = IniReadSection("muster.ini", "Hostname")

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

    For $i = 1 To UBound($section0) - 1
    GUICtrlSetData($bname, $section0[$i][1])
    Next
    For $i = 1 To UBound($section1) - 1
    GUICtrlSetData($hname, $section1[$i][1])
    Next

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

    $ButtonMsg = GUICtrlCreateButton("Button Msg", 20, 150)
    $ButtonEnd = GUICtrlCreateButton("Button End", 90, 150)

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

    GUISetState(@SW_SHOW, $master) ; will display an empty dialog box

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

    While 1
    If GUICtrlRead($hname) <> "" Then
    If BitAND(GUICtrlGetState($ButtonMsg), $GUI_DISABLE) Then GUICtrlSetState($ButtonMsg, $GUI_ENABLE)
    Else
    If BitAND(GUICtrlGetState($ButtonMsg), $GUI_ENABLE) Then GUICtrlSetState($ButtonMsg, $GUI_DISABLE)
    EndIf

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $ButtonEnd
    Exit

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

    Case $ButtonMsg
    MsgBox(1, "", GUICtrlRead($hname))

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

    Case $AboutItem
    $AboutGui = GUICreate("About", 100, 150)
    GUISetState(@SW_SHOW, $AboutGui)
    ;GUIDelete ($AboutGui)

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

    ;Switch GUIGetMsg()
    ; Case $GUI_EVENT_CLOSE, $Aboutgui
    ; EndSwitch
    EndSwitch
    Wend
    EndFunc

    [/autoit]
  • Es kommt immerwieder die gleiche Nachfrage, wenn man mal die SUFU benutzen würde...

    1. Es ist besser bei mehreren GUI's und auch allgemein GUIOnEventMode zu verwenden.
    2. Wenn du mehrere GUI's verwendest, ist es IMMER besser wenn du Sie vorher schon erstellt hast, und später nurnoch anzeigen musst.
    3. Hier ein Beispiel im GUIGetMsg() Mode zweier GUI's:

    [autoit]

    $gui1 = GUICreate("Programm", 200, 200) ;Gui 1
    $bt1 = GUICtrlCreateButton("About", 50, 50) ;Button zur About-box
    GUISetState(@SW_SHOW, $gui1) ;GUI anzeigen

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

    $gui2 = GUICreate("About", 150, 150) ;Gui 2
    $bt2 = GUICtrlCreateButton("Schließen", 10, 10) ;Gui 2 schließen button
    GUISetState(@SW_HIDE, $gui2) ;GUI verstecken

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

    While 1 ;schleife
    $nMsg = GUIGetMsg(1) ;Die 1 ist wichtig
    Switch $nMsg[1] ;Hier ebenfalls
    Case $gui1 ;Wenn gui1 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMSG nur mit 0
    Case $bt1 ;Wenn button 1 in gui 1 gedrückt wird
    GUISetState(@SW_HIDE, $gui1) ;GUI 1 verstecken
    GUISetState(@SW_SHOW, $gui2) ;GUI 2 anzeigen
    Case -3 ;Falls GUI 1 geschlossen
    Exit ;Skript schließen
    EndSwitch ;Ende der Switch von dem GUI 1
    Case $gui2 ;Falls gui2 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $bt2 ;Falls Button 2 (schließen) gedrückt wird
    GUISetState(@SW_SHOW, $gui1) ;GUI 1 anzeigen
    GUISetState(@SW_HIDE, $gui2) ;GUI 2 verstecken
    Case -3 ;Falls GUI 2 geschlossen wird
    GUISetState(@SW_SHOW, $gui1) ;GUI 1 anzeigen
    GUISetState(@SW_HIDE, $gui2) ;GUI 2 verstecken
    EndSwitch ;Ende der Switch von dem GUI 2
    EndSwitch ;Ende der switch des allem guis. du kannst so weitermachen mit x GUI's
    WEnd ;schleifenende

    [/autoit]
  • Hallo BurakSZ,

    du kannst mehrere Fälle für case angeben (spart hier 2 Zeilen) :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $gui1 = GUICreate("Programm", 200, 200) ;Gui 1
    $bt1 = GUICtrlCreateButton("About", 50, 50) ;Button zur About-box
    GUISetState(@SW_SHOW, $gui1) ;GUI anzeigen

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

    $gui2 = GUICreate("About", 150, 150) ;Gui 2
    $bt2 = GUICtrlCreateButton("Schließen", 10, 10) ;Gui 2 schließen button
    GUISetState(@SW_HIDE, $gui2) ;GUI verstecken

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

    While 1 ;schleife
    $nMsg = GUIGetMsg(1) ;Die 1 ist wichtig
    Switch $nMsg[1] ;Hier ebenfalls
    Case $gui1 ;Wenn gui1 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMSG nur mit 0
    Case $bt1 ;Wenn button 1 in gui 1 gedrückt wird
    GUISetState(@SW_HIDE, $gui1) ;GUI 1 verstecken
    GUISetState(@SW_SHOW, $gui2) ;GUI 2 anzeigen
    Case $GUI_EVENT_CLOSE ;Falls GUI 1 geschlossen
    Exit ;Skript schließen
    EndSwitch ;Ende der Switch von dem GUI 1
    Case $gui2 ;Falls gui2 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $bt2, $GUI_EVENT_CLOSE ;Falls Button 2 (schließen) gedrückt wird oder Gui2 geschlossen wird(X / Alt-F4 / Esc)
    GUISetState(@SW_SHOW, $gui1) ;GUI 1 anzeigen
    GUISetState(@SW_HIDE, $gui2) ;GUI 2 verstecken
    EndSwitch ;Ende der Switch von dem GUI 2
    EndSwitch ;Ende der switch des allem guis. du kannst so weitermachen mit x GUI's
    WEnd ;schleifenende

    [/autoit]

    auch finde ich es besser die Konstanten zu verwenden, anstatt ihres Wertes. Trotzdem Musterlösung, bleibt nur zu hoffen das es auch über die SuFu gefunden wird,

    mfg (Ato)Bert

  • Ich habe es einfach Quick'n'Dirty gemacht, weil ich wirklich keine Lust hab für jeden neuen User der dasselbe Problem hat ein neues Beispiel zu erstellen. Ich habe legendlich -3 gemacht, weil ich keine Lust hatte :)