GUI in einer GUI

  • Hm.. jetzt kommt ein anderes Problem auf

    [autoit]


    Case $Ersetzen
    $ErsetzenWindow = GUICreate("Ersetzen mit:", 335, 78, -1, -1, $WS_CHILD)
    GUICtrlCreateLabel("Suchen Nach:", 8, 8, 73, 17)
    $Ersetzen = GUICtrlCreateInput("", 88, 8, 145, 21)

    GUICtrlCreateLabel("Ersetzen mit:", 8, 40, 64, 17)
    $Ersetzenmit = GUICtrlCreateInput("", 88, 40, 145, 21)

    $ErsetzenButton = GUICtrlCreateButton("Ersetzen", 248, 8, 81, 25, 0)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)

    $ErsetzenAbbrechen = GUICtrlCreateButton("Abbrechen", 248, 40, 83, 25, 0)
    GUISetState(@SW_SHOW)

    While 1
    $ErsetzenMSG = GUIGetMsg()
    Select
    Case $ErsetzenMSG = $GUI_EVENT_CLOSE
    GUIDelete($ErsetzenWindow)
    Case $ErsetzenMSG = $ErsetzenButton
    Case $ErsetzenMSG = $ErsetzenAbbrechen
    EndSelect
    WEnd

    [/autoit]

    Edit:
    Wird das Fenster garnicht erst angezeigt und ich kann die Main GUI nichtmehr schließen o.o

  • Ich machst immer so

    Spoiler anzeigen
    [autoit]

    $gui = GUICReate("GUI",300,300)
    $buit = GUICtrlCreateButton("Öffnen",10,10)
    GUISEtState()

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

    While 1
    Switch GUIGETMSG()
    Case -3
    Exit
    Case $buit
    uffnen()
    EndSwitch
    WEnd

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

    Func uffnen()
    $hWnd = GUICreate("2. GUI",100,100)

    GUISETSTATE()

    While 1
    Switch GUIGETMSG()
    Case -3
    GUISETSTATE(@SW_HIDE,$hWnd)
    ExitLoop
    EndSwitch
    WEnd
    EndFunc

    [/autoit]
  • K habs jetzt Fenster wird angezeigt etc
    Code:

    [autoit]


    Case $Ersetzen
    $ErsetzenWindow = GUICreate("", 243, 154, -1, -1)

    GUICtrlCreateLabel("Suchen nach:", 8, 8, 96, 20)
    $Ersetzen = GUICtrlCreateInput("", 8, 32, 225, 24)
    GUICtrlCreateLabel("Ersetzen mit:", 8, 64, 92, 20)
    $Ersetzenmit = GUICtrlCreateInput("", 8, 88, 225, 24)

    $ErsetzenButton = GUICtrlCreateButton("Ersetzen", 8, 120, 105, 25, $WS_GROUP)
    $ErsetzenAbbrechen = GUICtrlCreateButton("Abbrechen", 130, 120, 105, 25, $WS_GROUP)

    GuiSetState()

    While 1
    Switch GuiGetMsg()
    Case -3
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    Case $GUI_EVENT_CLOSE
    GUIDelete($ErsetzenWindow)
    Case $ErsetzenButton
    GUIDelete($ErsetzenWindow)
    Case $ErsetzenAbbrechen
    GUIDelete($ErsetzenWindow)
    EndSwitch
    WEnd

    [/autoit]

    Wenn ich die GUI aber schließe kann ich die Haupt GUI nichtmehr schließen.
    Warum?

  • Versuche mal, GUIGetMsg() mit den Variablen, denen du die MainGUI und ChildGUI zugewiesen hast, aufzurufen. Dann müsste es gehen. Sonst prüft er nach Aufruf des 2. GUI's nur noch Sachen, die dort passieren (z.B. schließen oder Buttonklicks)

  • Der komplette Code von HastyNotes wäre etwas zu lang,
    da es mittlerweile über 500 Zeilen und 20.000 Zeichen sind :rofl:

    Hier mal der wichtige Abschnitt,
    bevor dieser gestartet wird lässt sich die HauptGUI ganz normal beenden.

    Spoiler anzeigen
    [autoit]


    Case $Ersetzen
    $ErsetzenWindow = GUICreate("", 243, 154, -1, -1)
    GUICtrlCreateLabel("Suchen nach:", 8, 8, 96, 20)
    $ErsetzenInput = GUICtrlCreateInput("", 8, 32, 225, 24)
    GUICtrlCreateLabel("Ersetzen mit:", 8, 64, 92, 20)
    $Ersetzenmit = GUICtrlCreateInput("", 8, 88, 225, 24)

    $ErsetzenButton = GUICtrlCreateButton("Ersetzen", 8, 120, 105, 25, $WS_GROUP)
    $ErsetzenAbbrechen = GUICtrlCreateButton("Abbrechen", 130, 120, 105, 25, $WS_GROUP)

    GuiSetState()

    While 1
    Switch GuiGetMsg()
    Case -3
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    Case $GUI_EVENT_CLOSE
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    Case $ErsetzenButton
    Switch GUICtrlRead($UberTab,1)
    Case $Tab1
    $log1 = GUICtrlRead($Edit1)
    $SuchenInhalt = GUICtrlRead($ErsetzenInput)
    $ErsetzenInhalt = GUICtrlRead($Ersetzenmit)
    $ErrechneText = StringReplace($log1, $SuchenInhalt, $ErsetzenInhalt)
    GUICtrlSetData($Edit1, $ErrechneText)
    Case $Tab2
    $log2 = GUICtrlRead($Edit2)
    $SuchenInhalt = GUICtrlRead($ErsetzenInput)
    $ErsetzenInhalt = GUICtrlRead($Ersetzenmit)
    $ErrechneText = StringReplace($log2, $SuchenInhalt, $ErsetzenInhalt)
    GUICtrlSetData($Edit2, $ErrechneText)
    Case $Tab3
    $log3 = GUICtrlRead($Edit3)
    $SuchenInhalt = GUICtrlRead($ErsetzenInput)
    $ErsetzenInhalt = GUICtrlRead($Ersetzenmit)
    $ErrechneText = StringReplace($log3, $SuchenInhalt, $ErsetzenInhalt)
    GUICtrlSetData($Edit3, $ErrechneText)
    Case $Tab4
    $log4 = GUICtrlRead($Edit4)
    $SuchenInhalt = GUICtrlRead($ErsetzenInput)
    $ErsetzenInhalt = GUICtrlRead($Ersetzenmit)
    $ErrechneText = StringReplace($log4, $SuchenInhalt, $ErsetzenInhalt)
    GUICtrlSetData($Edit4, $ErrechneText)
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    EndSwitch
    Case $ErsetzenAbbrechen
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    EndSwitch
    WEnd

    [/autoit]
  • [autoit]

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

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

    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $Button=GUICtrlCreateButton ( "Child Gui", 200, 200, 200, 50)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If Not GUIDelete() Then Exit
    Case $Button
    _Gui( $Form1, 100, 100, 200, 200 )
    EndSwitch
    WEnd

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

    Func _Gui($hwnd, $x,$y,$w,$h)
    $Child=GUICreate ( "", $w, $h, $x, $y, -1,$WS_CLIPCHILDREN )
    GUICreate ( "", 200, 200, 200, 200 )
    GUISetState()
    Return $Child
    EndFunc

    [/autoit]

    So kannste es zum Beispiel machen.

  • Hm.. ist das mit der Gui unter der Gui nicht ziemlich umständlich?

    Sollte doch auch leichter gehen.

    Die zweite Gui geht ja, das Problem ist nur das
    ich danach die HauptGUI nichtmehr schließen kann.

  • Wenn du es so machst wie ich es oben gemacht habe lässt sich auch die Hauptgui wieder schliesen

    • Offizieller Beitrag

    Sen . Egal wie lang din Code ist, poste Ihn . Der Spoiler verkraftet das. Aber zu deinem Problem , schau dir in der Hilfe mal die erweiterte Abfrage von GUIGetMsg an . Da kannst du auch abfragen von welcher Gui eine Nachricht kommt. Oder wechsel zum GuiOnEventMode .

    Diese Zeilen sind doppelt :

    [autoit]

    Case -3
    GuiSetState(@SW_HIDE,$ErsetzenWindow)
    Case $GUI_EVENT_CLOSE
    GuiSetState(@SW_HIDE,$ErsetzenWindow)

    [/autoit]

    Da $GUI_EVENT_CLOSE = -3 ist ;)