2 Fenster-Problem

  • Hallo zusammen,

    folgendes Problem:

    Ich starte mein Script mit:

    Spoiler anzeigen
    [autoit]


    _Start()

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

    Func _Start()
    _ebiniread()
    If FileExists(@ScriptDir & "\Settings\" & $box2 & ".txt") And FileExists(@ScriptDir & "\Settings\" & $box5 & ".txt") Then
    ;===============================================================
    ;===============================================================
    #cs
    Call _Main() if both textfiles are given
    #CE

    _Main()
    Else
    ;===============================================================
    ;===============================================================
    #cs
    First call _Settings() to set preconditions and Environments,
    if no further files are saved.
    This window is shown every time the precondition.txt and
    environment.txt is missing.
    #CE
    _Settings()
    EndIf
    EndFunc ;==>_Start

    [/autoit]

    Die Func _Main() erstellt dann ein Fenster:

    Spoiler anzeigen
    [autoit]


    Func _Main()
    ;==============================================================
    ;===== Settings Window ========================================
    ;==============================================================

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

    $WinMain = GUICreate($progname, 1200, 800, -1, -1)
    GUISetBkColor(0x182424) ;~ set background color
    $icon = GUISetIcon(@ScriptDir & '\Images\EB.ico')

    [/autoit]

    ...und die Func _Settings() sieht dann so aus:

    Spoiler anzeigen
    [autoit]


    Func _Settings()
    ;===============================================================
    ;===============================================================
    ;===== Toolwindow to create Preconditions and Environments

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

    ;==============================================================
    ;===== Settings Window ========================================
    ;==============================================================
    $WinSettings = GUICreate("Settings", 1200, 800, -1, -1)
    GUISetBkColor(0x182424) ;~ set background color
    $icon = GUISetIcon(@ScriptDir & '\Images\EB.ico')

    [/autoit]

    Wie kann ich nun aus meiner _Settings() heraus das Fenster $WinSettings schliessen und dann zu meiner _Main() zurückkehren?

    Mit folgendem Scriptteil:

    [autoit]


    Case $ExitButton1 ;=====> return to Main
    WinClose("Settings", "")
    _Main()

    [/autoit]


    wird das Fenster $WinSettings nicht geschlossen, sondern bleibt unten stehen, bis ich die Anwendung schliesse.
    Das gleiche Problem habe ich andersrum auch...

    Wie kriege ich die einzelnen Fenster geschlossen, dass immer nur ein einziges Fenster offen ist?

    Please help... ?(

    Gruß
    Pitter

    Gruß
    Pitter

    • Offizieller Beitrag
    Spoiler anzeigen
    [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]
  • Hmmm...

    Vielleicht hab ich das falsch erläutert... ?(

    Problem ist, dass wenn 2 bestimmte Dateien nicht da sind, wird erst das Child-Fenster geöffnet.
    Sind da alle Einträge gesetzt, soll das Child geschlossen werden und das Main-Fenster geöffnet werden.

    Zusätzlich kann ich aus dem Main-Fenster die Einstellungen löschen (...und die Dateien löschen, die im Child angelegt wurden). Mit diesem Lösch-Button soll dann das Child wieder aufgerufen werden, wo ich dann wieder neue Einstellungen abspeichern kann.

    Wenn ich Dein Beispiel richtig interpretiere, dann kann ich nur das Childfenster schliessen. schliesse ich das Main, geht alles aus.... und genau da liegt mein Problem.

    Gruß
    Pitter

    Gruß
    Pitter