Wie verhindere ich das schließen der Haupt GUI wenn ich z.b. eine
zweite GUI öffnen lasse und diese sich schließt?
GUI in einer GUI
-
- [ offen ]
-
Sen -
13. Mai 2009 um 16:00 -
Geschlossen -
Erledigt
-
-
Child Gui Style nehmen.
-
Hm.. jetzt kommt ein anderes Problem auf
[autoit]
[/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
WEndEdit:
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)
[/autoit] [autoit][/autoit] [autoit]
$buit = GUICtrlCreateButton("Öffnen",10,10)
GUISEtState()While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGETMSG()
Case -3
Exit
Case $buit
uffnen()
EndSwitch
WEndFunc uffnen()
[/autoit]
$hWnd = GUICreate("2. GUI",100,100)
GUISETSTATE()
While 1
Switch GUIGETMSG()
Case -3
GUISETSTATE(@SW_HIDE,$hWnd)
ExitLoop
EndSwitch
WEnd
EndFunc -
K habs jetzt Fenster wird angezeigt etc
[autoit]
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
WEndWenn 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)
-
Geht auch nicht,
ich verzweifle gerade.Es lässt sich weiterhin das Hauptfenster nicht mehr schließen.
-
Poste mal den gesamten Code. Vielleicht finden wir ja den Fehler darin.
-
Der komplette Code von HastyNotes wäre etwas zu lang,
da es mittlerweile über 500 Zeilen und 20.000 Zeichen sind
Hier mal der wichtige Abschnitt,
bevor dieser gestartet wird lässt sich die HauptGUI ganz normal beenden.Spoiler anzeigen
[autoit]
[/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]
#include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit]
#include <WindowsConstants.au3>$Form1 = GUICreate("Form1", 633, 447, 193, 125)
[/autoit][autoit][/autoit][autoit]
$Button=GUICtrlCreateButton ( "Child Gui", 200, 200, 200, 50)
GUISetState()While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
If Not GUIDelete() Then Exit
Case $Button
_Gui( $Form1, 100, 100, 200, 200 )
EndSwitch
WEndFunc _Gui($hwnd, $x,$y,$w,$h)
[/autoit]
$Child=GUICreate ( "", $w, $h, $x, $y, -1,$WS_CLIPCHILDREN )
GUICreate ( "", 200, 200, 200, 200 )
GUISetState()
Return $Child
EndFuncSo 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
-
So habs..
es war ein extrem dämlicher fehler.ExitLoop hat alles gelöst

-
- 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
[/autoit]
GuiSetState(@SW_HIDE,$ErsetzenWindow)
Case $GUI_EVENT_CLOSE
GuiSetState(@SW_HIDE,$ErsetzenWindow)Da $GUI_EVENT_CLOSE = -3 ist

-
Hey, dafür ist doch GUIGEtMsg(1) gedacht!!!
