Página 1 de 1

tener abiertas dos ventanas a la vez

Publicado: 24 Ene 2010, 18:35
por xapu
ola buenas!!
lo que queria saver es si se pueden tener abiertas dos ventanas que esten integradas en el mismo programa y si se puede interactuar con las dos a la vez.
i si se puede como seria
yo he probado asi(aunke ia me imaginaba k no funcionaria :P)

Código: Seleccionar todo

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

$Form1 = GUICreate("Form1", 205, 64, 189, 125)
$Button1 = GUICtrlCreateButton("Button1", 16, 16, 169, 25, $WS_GROUP)
$Form2 = GUICreate("Form1", 205, 95, 419, 122)
$Input1 = GUICtrlCreateInput("Input1", 16, 32, 169, 21)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd



Re: tener abiertas dos ventanas a la vez

Publicado: 25 Ene 2010, 03:44
por Nahuel
Si se puede, claro. Y la verdad es muy fácil. Yo siempre prefiero usar el modo On Event. Es más... prolijo, fácil y ordenado.
Ejemplo de como se haría para múltiples ventanas:

Código: Seleccionar todo

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

Opt("GUiOnEventMode",1)

GUICreate("VENTANA PRINCIPAL", 211, 162,0,0)
GUISetOnEvent($GUI_EVENT_CLOSE,"_salir")
GUICtrlCreateButton("Crear Ventana", 68, 60, 95, 25, 0)
GUICtrlSetOnEvent(-1,"_CrearGUI")
GUISetState(@SW_SHOW)

While 1
	Sleep(150)
WEnd

Func _salir()
	Exit
EndFunc

Func _CerrarGUI()
	GUIDelete(@GUI_WinHandle)
EndFunc

Func _Click()
	MsgBox(0,"Click","Hizo click en una de las ventanas",-1,@GUI_WinHandle)
EndFunc

Func _CrearGUI()
	GUICreate("", 211, 162)
	GUISetOnEvent($GUI_EVENT_CLOSE,"_CerrarGUI")
	GUICtrlCreateButton("Hacer Click", 68, 60, 95, 25, 0)
	GUICtrlSetOnEvent(-1,"_Click")
	GUISetState(@SW_SHOW)
EndFunc
Observá que podés crear muchas ventanas (no recuerdo el límite de AutoIt, pero es muchísimo) y cerrarlas independientemente. Podés crear diferentes controles en cada ventana y estos pueden actuar también de forma independiente. Si cerrás la ventana principal se cierran todas las otras ventanas (esto es en realidad por la forma en que hice el código). También podés hacerlo de la forma que a mi no me gusta, que es usando un ciclo con GuiGetMsg()

Código: Seleccionar todo

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


$gui_central = GUICreate("VENTANA PRINCIPAL", 211, 162, 0, 0)

$boton = GUICtrlCreateButton("Crear Ventana", 68, 60, 95, 25, 0)

GUISetState(@SW_SHOW)

While 1
	$msg = GUIGetMsg(1)
	Switch $msg[0]
		Case $GUI_EVENT_CLOSE
			If $msg[1] = $gui_central Then
				Exit
			Else
				GUIDelete($msg[1])
			EndIf
		Case $boton
			GUICreate("Ventana nueva")
			GUISetState()
	EndSwitch
WEnd
La clave está en pasar el parámetro 1 a GuiGetMsg de esa forma devuelve un array con informacion detallada sobre el evento y qué ventana lo disparó. Mirá en la ayuda de GuiGetMsg para saber más. Saludos!