Página 1 de 1

Problemas con ventanas en el script

Publicado: 02 Sep 2010, 11:53
por aplitec
Tengo dos problemas con los menús en el script:

1.- Cuando abro un opción de menú me sale la ventana hija , hasta aquí , todo perfecto. Pero si intento abrir otra opción del menú no me abre la otra ventana hija, tengo que cerrar la otra ventana.
2.-Cuando pulso en la ventana padre ($MainForm) no me cierra todas las ventanas, me cierra solo la ventana hija abierta y tengo que pulsar otra vez para cerrar la ventana padre.

Código: Seleccionar todo

#include <GuiEdit.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <TabConstants.au3>
$MainForm = GUICreate("aplitec",@DesktopWidth,@DesktopHeight-30,0,0)
$ParentWin_Pos = WinGetPos($Mainform, "")
;Menú
$Menu = GUICtrlCreateMenu("Archivos ")
$Options = GUICtrlCreateMenuItem("Serie", $Menu)
$nuevo = GUICtrlCreateMenuItem("Forma de pagos", $Menu)
;$SaveItem = GUICtrlCreateMenuItem("Almacen", $Menu)
;$PrintItem = GUICtrlCreateMenuItem("", $Menu)
;$MenuSep1 = GUICtrlCreateMenuItem("", $Menu)
;$RunScriptItem = GUICtrlCreateMenuItem("", $Menu)
;$MenuSep1 = GUICtrlCreateMenuItem("", $Menu)
$ExitItem = GUICtrlCreateMenuItem("Salir", $Menu)
GUISetState() 
debut()
Func debut()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	Case $GUI_EVENT_CLOSE
			GUISwitch($MainForm)
			GUIDelete()
			Exit
		Case $Options
			serie()
		Case $nuevo
			nuevo()
		Case $ExitItem
					GUISwitch($MainForm)
			GUIDelete()
			Exit
	EndSwitch
WEnd
EndFunc

Func serie()
$Preferences = GUICreate("Child Se", 600, 400, $ParentWin_Pos[0] + 300, $ParentWin_Pos[1] + 200, -1, -1, $MainForm)
$PageControl1 = GUICtrlCreateTab(8, 8, 580, 377)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
GUICtrlCreateTabItem("Général")
$Label1 = GUICtrlCreateLabel("Titre par défaut :", 32, 56, 84, 18)
$titreDefaut = GUICtrlCreateInput("", 120, 53, 265, 22)
GUICtrlCreateTabItem("")
$OK = GUICtrlCreateButton("&OK", 246, 272, 75, 25, $WS_GROUP)
$Annuler = GUICtrlCreateButton("Annuler", 326, 272, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
;GUISetState(@SW_DISABLE, $MainForm)
;$titreIni=IniRead("options.ini","Options","titre","")
;GUICtrlSetData($titreDefaut,$titreIni)
While 1
		$pMsg = GUIGetMsg()
	Select
	Case $pMsg=$GUI_EVENT_CLOSE Or $pMsg=$Annuler
		GUISetState(@SW_ENABLE, $MainForm)
		GUISwitch($MainForm)
		GUIDelete($Preferences)
		Return
	Case $pMsg=$OK
		;$titre=GUICtrlRead($titreDefaut)
		;IniWrite("Options.ini","Options","titre",$titre)
		GUISwitch($MainForm)
		GUIDelete($Preferences)
		Return
	EndSelect
WEnd
EndFunc

Func nuevo()
$nuevowin = GUICreate("Forma de pago", 600, 400, $ParentWin_Pos[0] + 300, $ParentWin_Pos[1] + 200, -1, -1, $MainForm)
$PageControl1 = GUICtrlCreateTab(8, 8, 580, 377)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
GUICtrlCreateTabItem("Général")
$Label1 = GUICtrlCreateLabel("Titre par défaut :", 32, 56, 84, 18)
$titreDefaut = GUICtrlCreateInput("", 120, 53, 265, 22)
GUICtrlCreateTabItem("")
$OK = GUICtrlCreateButton("&OK", 246, 272, 75, 25, $WS_GROUP)
$Annuler = GUICtrlCreateButton("Annuler", 326, 272, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
;GUISetState(@SW_DISABLE, $MainForm)
;$titreIni=IniRead("options.ini","Options","titre","")
;GUICtrlSetData($titreDefaut,$titreIni)
While 1
		$puMsg = GUIGetMsg()
	Select
	Case $puMsg=$GUI_EVENT_CLOSE Or $puMsg=$Annuler
		GUISetState(@SW_ENABLE, $MainForm)
		GUISwitch($MainForm)
		GUIDelete($nuevowin)
		Return
	Case $puMsg=$OK
		;$titre=GUICtrlRead($titreDefaut)
		;IniWrite("Options.ini","Options","titre",$titre)
		GUISwitch($MainForm)
		GUIDelete($nuevowin)
		Return
	EndSelect
WEnd
EndFunc
Gracias
Aplitec

Re: Problemas con ventanas en el script

Publicado: 06 Sep 2010, 09:07
por Ximorro
Pues pasa porque cuando ejecutas una de las ventanas hija entras en el bucle de controlar sus propios eventos, el que está dentro de su función correspondiente, por lo que los eventos de la ventana padre ya no los estás mirando, por lo que no se ejecutan.
Lo de que al cerrar la principal se cierra la secundaria es porque el evento se llama igual, $GUI_EVENT_CLOSE, que sí miras en la secundaria, donde la cierras (aunque el evento lo ha lanzado la otra ventana), si por ejemplo intentas cerrar desde la principal con $ExitItem del menú verás que eso no funciona, porque en los eventos de la ventana hija no se mira.

Manejar varios GUIs a la vez es un poco rollo, pero si quieres hacerlo tienes dos opciones:
1.- Con GUIGetMsg como lo estás haciendo, pero mirando los eventos de TODAS las ventanas a la vez en el mismo bucle, para eso hay que usar el parámetro de uso avanzado: GUIGetMsg(1), de esta manera en vez de sólo el evento disparado te devuelve un array donde te indica además de qué ventana llega dicho evento (y más cosas como la posición del cursor)
2.- Usando el otro modo de control de eventos, el modo OnEvent, mira la ayuda en GUI Reference, ahí te explica los dos modos.

De todas maneras puede ser un lío, yo procuro no manejar varios GUIs a la vez, si es posible oculto uno antes de mostrar el otro, así sólo tengo que manejar los eventos de la ventana visible y olvidarme de las demás.

Re: Problemas con ventanas en el script

Publicado: 06 Sep 2010, 09:40
por aplitec
Gracias Ximorro, lo intentare cambiar

Saludos