Jedes Fenster schließen können

  • Hallo alle zusammen

    Sufu und mein freund Google habe ich benutzt, habe aber nicht gefunden

    Ich komme an ein Projekt nicht weiter.
    Ich habe diesen Skript mit GUIs gemacht.
    Aber ich ab ein Problem.

    Ich habe zu meinem GUI Hauptfenster noch 2 andere angelegt (Anleitung, About).
    Jetzt hab ich das problem, wenn ich diese über das X Symbol Schliessen will, schliesst sich der ganze Script.

    Die Script (für Forum veränderte Version, wegen private inhalte) sieht so aus:

    [autoit]


    $frmMain = GUICreate ("GUI Fenster Haupt", 400, 220, -1,-1) ; Hauptfenster
    GUI inhalt
    ....

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

    $sub1 = GUICreate ("Anletung:", 330, 165, -1,-1) ; Anleitungs Fenster
    GUICtrlCreateLabel("Anleitung:",10,20)
    ....

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

    $sub2 = GUICreate ("Credits", 380, 190, -1,-1) ; Credits Fenster
    GUICtrlCreateLabel("Credits.", 11, 10)
    ....

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

    GUISetState(@SW_SHOW, $frmMain)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    exit
    EndSwitch
    WEnd

    [/autoit]

    Jetzt möchte ich aber das ich jedes Fenster einzelnd schließen kann. Ich möchte auserdem beim Switch bleiben.

    Ich wäre dankbar über hilfe

    • Offizieller Beitrag
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $main_GUI = GUICreate("Main GUI", 300, 100, 10, 10, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX))
    $b_1 = GUICtrlCreateButton("Click me 1", 10, 10, 80, 20)
    GUISetState(@SW_SHOW, $main_GUI)

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

    $child_GUI = GUICreate("Child GUI", 300, 100, 330, 10, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX), Default, $main_GUI)
    $b_2 = GUICtrlCreateButton("Click me 2", 10, 10, 80, 20)
    GUISetState(@SW_SHOW, $child_GUI)

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

    GUIRegisterMsg($WM_GETMINMAXINFO, "MY_WM_GETMINMAXINFO")

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $main_GUI
    MsgBox(16, "MAIN", "Closed MAIN", 2)
    Exit(0)
    Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $child_GUI
    MsgBox(16, "CHILD", "CLOSED CHILD", 2)
    GUIDelete($child_GUI)
    Case $msg[0] = $b_1 And $msg[1] = $main_GUI
    MsgBox(16, "MAIN", "Button 1", 2)
    Case $msg[0] = $b_2 And $msg[1] = $child_GUI
    MsgBox(16, "CHILD", "Button 2", 2)
    EndSelect
    WEnd

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

    Func MY_WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam)
    If $hWnd <> $main_GUI Then Return
    $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($minmaxinfo, 7, 500) ; min X
    DllStructSetData($minmaxinfo, 8, 250) ; min Y
    DllStructSetData($minmaxinfo, 9, 500) ; max X
    DllStructSetData($minmaxinfo, 10, 700) ; max Y
    Return 0
    EndFunc ;==>MY_WM_GETMINMAXINFO

    [/autoit]
  • moin!
    Xenobiologist : das mit dem $msg[0] | $msg[1] is ja echt praktisch, wusst ich nich^^

    aber kannst du die funktion hier nochmal genauer erklären, bzw. wozu die da ist? :

    außerdem wollt ich noch fragen: kann man in zeile 23 + 25
    "undefined undefinedAnd $msg[1] = $main_GUI" und "And $msg[1] = $child_GUI" nicht weglassen, weil ja $b_1 bzw. $b_2 eindeutig sind.

  • der script ist hilfreich, aber nicht gut für mein projekt ich mein ich öffne über menü (Hife) Die option Anleitung. wenn ich da auf Close klicke geht eszwarweg aber dieser gui ist totalgelösch wegen

    GUIDelete($sub1)

    naja und besser hilfezu kriegen stell ich mal den ganzen script rein. Das ist der File download Script von McPoldy nur halt um einiges erweitert.

    Apropo ich hab mir anders etwas abgeholfen löscht zwar das problem nicht aber wenigsten etwas


    Der Script (paar sachen sind doppelt weil ich 2(Tab) downlad Sectionen gemacht habe):
    Der script ist un unbeschichtich aber hoffe ihr könnt ihn einigermaßen verstehen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <string.au3>
    #NoTrayIcon

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

    ;Server Url
    Dim $ServerUrl = "http://url.de/files/"
    Dim $ServerUrll = "http://url.de/sonstiges/"
    Dim $FileList = "files.txt"
    Dim $FileListt = "file.txt"

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

    ;Speicherpfad für die Liste
    Dim $SaveFileList = @TempDir & "\files.txt"
    Dim $SaveFileListt = @TempDir & "\file.txt"

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

    ;Textdatei laden
    If InetGet($ServerUrl & $FileList, $SaveFileList, 1) = 0 Then
    MsgBox(48, "Fehler", "Fehler beim aktualisieren der Dateiliste")
    Exit 1
    EndIf

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

    If InetGet($ServerUrll & $FileListt, $SaveFileListt, 1) = 0 Then
    MsgBox(48, "Fehler", "Fehler beim aktualisieren der Dateiliste")
    Exit 1
    EndIf

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

    ;Dateiliste zum lesen öffnen
    Dim $fso = FileOpen($SaveFileList, 0)
    Dim $fsoo = FileOpen($SaveFileListt, 0)

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

    ;Inhalt der Datei einlesen
    Dim $txt = FileRead($fso)
    Dim $txtt = FileRead($fsoo)
    ;Dateiliste schliessen
    FileClose($fso)
    FileClose($fsoo)

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

    ;@CRLF aus der $txt Variabele entfernen
    $txt = StringReplace($txt, @CRLF, "|")
    $txtt = StringReplace($txtt, @CRLF, "|")

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

    $txtList = StringSplit($txt, "|")
    $txtListt = StringSplit($txtt, "|")

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

    $txt = ""
    For $i = 1 To $txtList[0]
    $txtlistlen = StringLen($txtList[$i]) + 1
    $txtliststart = StringInStr($txtList[$i], "/") + 1
    If $txtliststart = 0 Then
    $txt = $txt & $i & "-" & $txtlist[$i] & "|"
    Else
    $txtlistcount = $txtlistlen - $txtliststart
    $txtlistresult = StringMid($txtList[$i], $txtliststart, $txtlistcount)
    $txt = $txt & $i & "-" & $txtlistresult & "|"
    EndIf
    Next

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

    $txtt = ""
    For $ii = 1 To $txtListt[0]
    $txtlistlenn = StringLen($txtListt[$ii]) + 1
    $txtliststartt = StringInStr($txtListt[$ii], "/") + 1
    If $txtliststartt = 0 Then
    $txtt = $txtt & $ii & "-" & $txtListt[$ii] & "|"
    Else
    $txtlistcountt = $txtlistlenn - $txtliststartt
    $txtlistresultt = StringMid($txtListt[$ii], $txtliststartt, $txtlistcountt)
    $txtt = $txtt & $ii & "-" & $txtlistresultt & "|"
    EndIf
    Next
    $txt = StringTrimRight($txt, 1)
    $txtt = StringTrimRight($txtt, 1)

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

    ;Form
    $frmMain = GUICreate ("Downloader", 400, 220, -1,-1) ; GUI Fenster Machen

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

    $filemenu = GUICtrlCreateMenu("Datei"); File Menu
    $download1 = GUICtrlCreateMenuItem("Download: Programme", $filemenu)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $download2 = GUICtrlCreateMenuItem("Download: Sonstiges", $filemenu)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $exititem = GUICtrlCreateMenuItem("Schließen", $filemenu)
    $separator1 = GUICtrlCreateMenuItem("", $filemenu, 2)

    $helpmenu = GUICtrlCreateMenu("Hilfe") ; Help Menu
    $elite = GUICtrlCreateMenuItem("Elite-PvPers", $helpmenu)
    GUICtrlSetCursor(-1, 0)
    $help = GUICtrlCreateMenuItem("Anleitung", $helpmenu)
    $about = GUICtrlCreateMenuItem("About", $helpmenu)

    GUICtrlCreateTab (5,5, 390, 190);Tab machen

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

    GUICtrlCreateTabitem ("Download Programme");Tab1 " Downloader "
    $pcbDownload = GUICtrlCreateProgress ( 24, 84, 350, 17)
    $infoLabel = GUICtrlCreateLabel("",152,105,300,25)
    $cmdButton = GUICtrlCreateButton ("Starte Download", 46, 140, 300, 25, 0)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $FileList = GUICtrlCreateCombo ("Datei auswählen", 46, 40, 300, 25)
    GUICtrlSetData (-1, $txt)

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

    $Tab3 = GUICtrlCreateTabitem ("Download Sonstiges");Tab2 "Downloader Sonstiges
    $pcbDownloadd = GUICtrlCreateProgress ( 24, 84, 350, 17)
    $infoLabell = GUICtrlCreateLabel("",152,105,300,25)
    $cmdButtonn = GUICtrlCreateButton ("Starte Download", 46, 140, 300, 25, 0)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $FileListt = GUICtrlCreateCombo ("Datei auswählen", 46, 40, 300, 25)
    GUICtrlSetData (-1, $txtt)

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

    GUICtrlCreateTabitem ("") ;Tab Leiste Ende

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

    $sub1 = GUICreate ("Anletung: Zum Programme downloader", 330, 165, -1,-1); Zusätzliches Fenster 1
    GUICtrlCreateLabel("Anleitung:",10,20)
    GUICtrlCreateLabel("Datei auswählen und auf Starte Download klicken",20,35)
    GUICtrlCreateLabel("Klicke aufs Bild:",60,80)
    $pic1 = GUICtrlCreatePic("bilder\banner2.gif",20,95,234,60)
    GUICtrlSetCursor(-1, 0)
    $ok1 = GUICtrlCreateButton ("Anleitung Schließen", 200, 60);Button

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

    $sub2 = GUICreate ("Credits: Zum Programm downloader", 380, 190, -1,-1); Zusätzliches Fenster 2
    GUICtrlCreateLabel("Dies Programm downloadet euch meine Programme" & @CRLF & "Das Programm habe ich gemacht, damit ihr meine Programme Downloaden könnt" & @CRLF & "Diese Programme werden in keinen Foren ohne meine Erlaubniss veröffentlicht.", 11, 10)
    GUICtrlSetBkColor(-1,0x00ff00)
    GUICtrlCreateLabel("Updates vorenthalten", 10, 100)
    GUICtrlSetBkColor(-1,0xCC0000)
    $pic2 = GUICtrlCreatePic("bilder\scripter.gif", 0,130, 380, 60)
    GUICtrlSetCursor(-1, 0)
    $ok2 = GUICtrlCreateButton (" Dieses Fenster schließen ", 245, 97); Button

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

    ;Zeigt HauptFenster an
    GUISetState(@SW_SHOW, $frmMain)

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

    ;Variable für die derzeit Ausgewählte Datei
    Dim $selectet
    Dim $selectett
    ;Variable für die Dateiendung
    Dim $mediaformat
    Dim $mediaformatt
    ;Speicherort
    Dim $SaveFile
    Dim $SaveFilee
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $help
    GUISetState(@SW_SHOW, $sub1);Helfmenü eintrag Anleitung
    Case $ok1
    GUISetState(@SW_HIDE, $sub1); Button in Sub 1
    Case $about
    GUISetState(@SW_SHOW, $sub2);Helfmenü eintrag Credits
    Case $ok2
    GUISetState(@SW_HIDE, $sub2); Button in Sub 2
    Case $elite
    ShellExecute("http://url/"); Helfmenü eintrag Elite PvPers
    Case $exititem
    Exit
    Case $download2
    $SaveFilee = FileSaveDialog("Datei Speichern...", @DesktopDir, "Datei (*." & $mediaformatt & ")", 2, GUICtrlRead($FileListt))
    If Not @error Then RunDownload1()

    Case $download1
    $SaveFile = FileSaveDialog("Datei Speichern...", @DesktopDir, "Datei (*." & $mediaformat & ")", 2, GUICtrlRead($FileList))
    If Not @error Then RunDownload()

    Case $pic1
    ShellExecute("http://www.url.de");link für Pic 1
    Case $pic2
    ShellExecute("http://www.url.com/");link für Pic 2
    Case $cmdButton
    $SaveFile = FileSaveDialog("Datei Speichern...", @DesktopDir, "Datei (*." & $mediaformat & ")", 2, GUICtrlRead($FileList))
    If Not @error Then RunDownload()

    Case $cmdButtonn
    $SaveFilee = FileSaveDialog("Datei Speichern...", @DesktopDir, "Datei (*." & $mediaformatt & ")", 2, GUICtrlRead($FileListt))
    If Not @error Then RunDownload1()

    Case $FileListt
    GUICtrlSetData($infoLabell,"")
    $id = StringLeft(GUICtrlRead($FileListt),StringInStr(GUICtrlRead($FileListt),"-")- 1)
    $selectett = $ServerUrll & $txtListt[$id]
    InetGetSize($selectett)
    If @error Then
    GUICtrlSetState($cmdButtonn, $GUI_DISABLE)
    GUICtrlSetState($download2, $GUI_DISABLE)
    Else
    GUICtrlSetState($cmdButtonn, $GUI_ENABLE)
    GUICtrlSetState($download2, $GUI_ENABLE)
    EndIf
    $mediaformatt = StringRight(GUICtrlRead($FileListt), 3)

    Case $FileList
    GUICtrlSetData($infoLabel,"")
    $id = StringLeft(GUICtrlRead($FileList),StringInStr(GUICtrlRead($FileList),"-")- 1)
    $selectet = $ServerUrl & $txtList[$id]
    InetGetSize($selectet)
    If @error Then
    GUICtrlSetState($cmdButton, $GUI_DISABLE)
    GUICtrlSetState($download1, $GUI_DISABLE)
    Else
    GUICtrlSetState($cmdButton, $GUI_ENABLE)
    GUICtrlSetState($download1, $GUI_ENABLE)
    EndIf
    $mediaformat = StringRight(GUICtrlRead($FileList), 3)
    EndSwitch
    WEnd

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

    Func RunDownload()
    GUICtrlSetState($cmdButton, $GUI_DISABLE)
    GUICtrlSetState($download1, $GUI_DISABLE)
    GUICtrlSetState($download2, $GUI_DISABLE)
    GUICtrlSetState($cmdButtonn, $GUI_DISABLE)
    $FileSize = InetGetSize($selectet)
    InetGet($selectet, $SaveFile, 1, 1)
    $curSize = 0
    Do
    GUICtrlSetData($pcbDownload, $curSize)
    $curFileSize = FileGetSize($SaveFile)
    $curSize = $curFileSize * 100
    $curSize = $curSize / $FileSize
    $curSize = Ceiling($curSize)
    $curFileSize = Round($curFileSize / 1024 / 1024, 2)
    GUICtrlSetData($infoLabel, $curFileSize & " MB - " & Round($FileSize / 1024 / 1024, 2) & " MB (" & $curSize & "%)")
    Sleep(200)
    Until $curSize >= 99
    GUICtrlSetState($cmdButton, $GUI_ENABLE)
    GUICtrlSetState($download1, $GUI_ENABLE)
    GUICtrlSetState($download2, $GUI_ENABLE)
    GUICtrlSetState($cmdButtonn, $GUI_ENABLE)
    GUICtrlSetData($infoLabel, "Download beendet")
    GUICtrlSetData($pcbDownload, 0)
    EndFunc

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

    Func RunDownload1()
    GUICtrlSetState($cmdButton, $GUI_DISABLE)
    GUICtrlSetState($download1, $GUI_DISABLE)
    GUICtrlSetState($download2, $GUI_DISABLE)
    GUICtrlSetState($cmdButtonn, $GUI_DISABLE)
    $FileSizee = InetGetSize($selectett)
    InetGet($selectett, $SaveFilee, 1, 1)
    $curSizee = 0
    Do
    GUICtrlSetData($pcbDownloadd, $curSizee)
    $curFileSizee = FileGetSize($SaveFilee)
    $curSizee = $curFileSizee * 100
    $curSizee = $curSizee / $FileSizee
    $curSizee = Ceiling($curSizee)
    $curFileSizee = Round($curFileSizee / 1024 / 1024, 2)
    GUICtrlSetData($infoLabell, $curFileSizee & " MB - " & Round($FileSizee / 1024 / 1024, 2) & " MB (" & $curSizee & "%)")
    Sleep(200)
    Until $curSizee >= 99
    GUICtrlSetState($cmdButton, $GUI_ENABLE)
    GUICtrlSetState($download1, $GUI_ENABLE)
    GUICtrlSetState($download2, $GUI_ENABLE)
    GUICtrlSetState($cmdButtonn, $GUI_ENABLE)
    GUICtrlSetData($infoLabell, "Download beendet")
    GUICtrlSetData($pcbDownloadd, 0)
    EndFunc

    [/autoit]

    Ich weis der Script ist nicht der tollste aber für mich reicht es.
    Wäre trotzdem dankbar über hilfe

  • ich brauch ein script worüber man zbs. about fenster schließen kann und doch immer wieder öffenen kann.
    ich mein klickt man in der Menüleiste auf About dann kommt ein GUI Fenster und das soll geschloßen werden über Close und das ohne den ganzen script zu beenden. aber das fenster sollte sich jederzeit wieder über das About menü öffnen lassen können