Página 1 de 1

como poner 3 aplicaciones dentro de una?

Publicado: 08 Ago 2010, 18:41
por Andres_sc
Hola amigos de autoit !!
bueno estoy tratando de crear una aplicacion ke solo tenga 3 botones y ke apretando el boton 1 por ejemplo
abra el proyecto 1 echo en autoit y asi con los demas apretando el boton 2 salga el proyecto 2 etc.
ej:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("3 en 1", 251, 207, 192, 124)
$Button1 = GUICtrlCreateButton("proyecto 1", 72, 32, 105, 33, $WS_GROUP)
$Button2 = GUICtrlCreateButton("proyecto 2", 72, 80, 105, 33, $WS_GROUP)
$Button3 = GUICtrlCreateButton("proyecto 3", 72, 128, 105, 33, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

		Case $Form1
		Case $Form1
		Case $Form1
		Case $Form1
		Case $Button1
		Case $Button2
		Case $Button3
	EndSwitch
WEnd
esta echo en koda como ejemplo :smt001
y ke al apretar proyecto 1 abriera algo asi

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("3 en 1", 251, 207, 192, 124)
$Button1 = GUICtrlCreateButton("Empesar", 72, 128, 105, 33, $WS_GROUP)
$Input1 = GUICtrlCreateInput("aca escribis algo", 24, 48, 193, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

		Case $Form1
		Case $Form1
		Case $Form1
		Case $Form1
		Case $Button1
		Case $Input1
	EndSwitch
WEnd
Espero ser claro y me puedan ayudar desde ya muchas gracias :smt023

Re: como poner 3 aplicaciones dentro de una?

Publicado: 08 Ago 2010, 20:27
por torni
tan fácil como agregar esto al 'evento' del boton:

GUICreate('mi gui') ;crea ventana por defecto
GUISetState() ;la muestra

Re: como poner 3 aplicaciones dentro de una?

Publicado: 09 Ago 2010, 09:10
por Ximorro
¿Pero con abrir el proyecto quieres decir abrir el código fuente para que lo vea el usuario? (como un visor de programas) ¿o ejecutarlo?
Lo primero puedes hacerlo abriendo el Scite o el Notepad con el código, o si lo quieres en tu programa poniéndolo en una caja de texto.

Para lo segundo si tienes los otros 3 programas compilados puedes ejecutar el exe (por ejemplo con Run() ). Esta es una opción muy fácil de hacer, aunque hay que tener varios archivos (el programa principal y los 3 a ejecutar)

Tener todos los códigos en un programa también es posible, tendrás que montar los 3 programas a base de funciones para llamarlas fácil desde el bucle selector principal, y cada vez que se ejecute uno ocultar la pantalla principal y mostrar la del programa en cuestión. Cuando el programa se cierra en vez de salir del programa vuelve a mostrar el GUI principal.

Re: como poner 3 aplicaciones dentro de una?

Publicado: 09 Ago 2010, 17:46
por Andres_sc
Primero que nada gracias por responder y por la ayuda :smt023
estuve probando y no me sale pero la idea es esa .
Tener todos los códigos en un programa también es posible, tendrás que montar los 3 programas a base de funciones para llamarlas fácil desde el bucle selector principal, y cada vez que se ejecute uno ocultar la pantalla principal y mostrar la del programa en cuestión. Cuando el programa se cierra en vez de salir del programa vuelve a mostrar el GUI principal.
quiero saber como lo puedo hacer :smt017
gracias por su tiempo y ayuda !!

Re: como poner 3 aplicaciones dentro de una?

Publicado: 10 Ago 2010, 08:54
por Ximorro
Hum, recuerda que siempre pedimos ver el código que se está haciendo, así ya tenemos algo sobre lo que trabajar y además vemos que efectivamente estás trabajando en ello...

Te pongo un esquema de ejemplo, seguir a partir de aquí es trivial. En este caso he hecho que las tres aplicaciones hagan prácticamente lo mismo, pero lógicamente variarlas es cosa de cambiar los controles de cada ventana y su funcionalidad.
Otra forma parecida sería crear todos los GUI al principio, pero ocultos, y al "ejecutar aplicación" lo que se haría es mostrarlo y entrar en su bucle de eventos. Esto es más adecuado cuando se pase muchas veces de una aplicación a otra. Cuando no se hacen muchos cambios es mejor no tener los GUI siempre en memoria, sino ir creándolos y destruyéndolos en demanda (es lo que yo he hecho en este ejemplo). Naturalmente si creas los GUI desde el principio, sus controles no pueden llamarse igual, al crearlos por separado si se puede hacer, por ejemplo yo he llamado $btnCerrar a los tres botones de cerrar de las aplicaciones, pero son tres botones diferentes.

Ojo que lo más fácil es ocultar la ventana principal cuando abras otra, así te centras sólo con los eventos de la ventana visible. Se pueden tener varios GUI abiertos a la vez pero entonces la gestión de eventos se vuelve bastante más complicada.

He empezado a usar to código pero como puedes ver he quitado algunas cosas que sobraban y he puesto nombres que ayudan a saber lo que estamos haciendo, ¿a que se entiende mejor viendo $GUI_principal y $GUI_programa1 que $Form1 y $Form2 o $btnCerrar que $Button1?

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

$GUI_principal = GUICreate("3 en 1", 250,200, -1,100)
$btnProg1 = GUICtrlCreateButton("proyecto 1", 72, 32, 105, 33)
$btnProg2 = GUICtrlCreateButton("proyecto 2", 72, 80, 105, 33)
$btnProg3 = GUICtrlCreateButton("proyecto 3", 72, 128, 105, 33)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $btnProg1
			GUISetState(@SW_HIDE)
			_ArrancaPrograma1()
		Case $btnProg2
			GUISetState(@SW_HIDE)
			_ArrancaPrograma2()
		Case $btnProg3
			GUISetState(@SW_HIDE)
			_ArrancaPrograma3()
	EndSwitch
WEnd

Func _ArrancaPrograma1()
	$GUI_programa1 = GUICreate("PROGRAMA 1", 300,150)
	GUICtrlCreateLabel("¡¡Soy el programa UNO!!", 30,30 ,250,30)
	GUICtrlSetFont(-1, 14, 800)
	$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE, $btnCerrar
				GUIDelete($GUI_programa1)
				GUISetState(@SW_SHOW, $GUI_principal)
				Return
		EndSwitch
	WEnd
EndFunc

Func _ArrancaPrograma2()
	$GUI_programa2 = GUICreate("PROGRAMA 2", 300,150)
	GUICtrlCreateLabel("¡¡Soy el programa DOS!!", 30,30 ,250,30)
	GUICtrlSetFont(-1, 14, 800)
	$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE, $btnCerrar
				GUIDelete($GUI_programa2)
				GUISetState(@SW_SHOW, $GUI_principal)
				Return
		EndSwitch
	WEnd
EndFunc

Func _ArrancaPrograma3()
	$GUI_programa3 = GUICreate("PROGRAMA 3", 300,150)
	GUICtrlCreateLabel("¡¡Soy el programa TRES!!", 30,30 ,250,30)
	GUICtrlSetFont(-1, 14, 800)
	$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE, $btnCerrar
				GUIDelete($GUI_programa3)
				GUISetState(@SW_SHOW, $GUI_principal)
				Return
		EndSwitch
	WEnd
EndFunc

Re: como poner 3 aplicaciones dentro de una?

Publicado: 10 Ago 2010, 16:47
por Andres_sc
:smt038 Ximorro sos un genioo :smt038
es justo lo que estaba tratando de hacer, y lo vengo intentando hace 2 dias
y nada, lo haces ver tan simple que la verdad me siento un ignorante viendo
lo simple que lo haces.
Me pongo a trabajar con esto tengo bastante por hacer :smt003
mil graciass !!!! :smt023
Con respecto a que no puse los codigos es por que ya tengo echo los 3 y
estan funcionando bien, los que me ayudaron aca en autoit no queria
repetir los codigos anteriores :smt017 por eso puse ejemplo con koda. :smt039

Re: como poner 3 aplicaciones dentro de una?

Publicado: 11 Ago 2010, 08:25
por Ximorro
Bueno, me alegro que te guste tanto, no es para tanto, de verdad ;-)

Pero creo que no has entendido lo que quería decir con que nos ayudaras con tu código. No me refería a poner los códigos de los tres programas, eso se puede simplificar (como he hecho yo creando tres GUIs sencillos). Se trataba de que mostraras ese código que intentaba abrirlos, ¡si has estado dos días con ello algo habrás hecho!

El código de Koda que pones no hace nada al respecto, sólo crea un GUI con tres botones, y haces cosas raras porque eso del Case $Form1 no tiene mucho sentido, ¡y menos ponerlo cuatro veces! Así que realmente me da la impresión de que no he visto el código que estabas haciendo... :smt017
No pasa nada que no funcione, por eso preguntas, y tampoco que no esté muy bien ¡todos hemos sido principiantes!. Pero digo yo que algo más habrías hecho. Aquí lo que nos gusta es que se muestre que el que pregunta se ha pegado con el problema, y que sigue haciéndolo, nos gusta ayudar al que se ayuda :smt006

Respecto a la solución que te doy me alegro de que te guste. Lo importante es que la entiendas, que es como se aprende. La verdad es que no es tan complicada ¿verdad? Las soluciones más elegantes son normalmente las más sencillas. :smt002

Re: como poner 3 aplicaciones dentro de una?

Publicado: 11 Ago 2010, 10:44
por juantxo
Aunque la opción de Ximorro esta genial, te voy a dar otra que puede ser útil también.

Consiste en hacer que los programas secundarios sean funciones e incluirlos en el programa principal.

Es decir: En el programa principal haces

Código: Seleccionar todo

#include "Prg_Aux1.au3" 
#include "Prg_Aux2.au3" 
#include "Prg_Aux3.au3" 
(...)
Case $msg= $buton1  ; llamada al programa 1
           Prg1()
Case $msg= $buton2  ; llamada al programa 2
           Prg2()
Case $msg= $buton3  ; llamada al programa 3
           Prg3()
(...)
Y el programa auxiliar 1:

Código: Seleccionar todo

#Region Codigo principal PRG_aux1
Func prg1()
    Msgbox( 1,"Programa 1", "Hola",5)
    Pausa()
EndFun
#EndRegion Codigo principal PRG_aux1
;-------------------------------------------------
#Region funciones propias del PRG1
Func Pausa()
   Sleep (1000)
EndFunc
#EndRegion funciones propias del PRG1
El resto serian igual.

¿Te he aclarado algo, o no he conseguido explicarme??? :smt040

Re: como poner 3 aplicaciones dentro de una?

Publicado: 11 Ago 2010, 12:10
por Ximorro
Hombre pues en principio ese es un cambio organizativo, lógicamente mis "programas" también son funciones, yo las he puesto en el mismo au3 y tú las organizas en archivos fuente diferentes en vez de en el mismo.
Es una ampliación interesante para organizar el código, de todas maneras no funciona muy bien si quieres interactuar con el programa principal.

Tus "programas" son totalmente independientes, un MsgBox, intenta hacer un GUI y verás...
Por ejemplo saca mi función _ArrancaPrograma2() a un archivo P2.au3, borras la función del programa principal pero añades al principio:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include "P2.au3"
Lógicamente se haría lo mismo con los otros dos subprogramas, pero por probar más rápido se puede hacer sólo con uno.

Verás el problema al que me refiero. Acceder a algo del programa principal desde los subprogramas puede ser complicado, y quizás sea más complicado con declaración obligada de variables (Opt("MustDeclareVars", 1)), por si da problemas adicionales.

A ver, en este caso concreto basta hacer que el programa principal se auto-muestre de nuevo cuando retorne la función de ejecución de subprogama, pero podría ser más complicado si hay que acceder al GUI u otras variables del programa principal desde los subprogramas.

Ya digo que lo de crear varios au3 es buena idea para organizar códigos largos, que quede claro que la idea me gusta, pero surgen algunos problemas técnicos con los que hay que tener cuidado.

Re: como poner 3 aplicaciones dentro de una?

Publicado: 11 Ago 2010, 17:44
por Andres_sc
Gracias por la ayuda lo que dice juantxo no lo entiendo mucho pero lo
voy a tener en cuenta para aprender igual y ver como funciona su
ejemplo :smt023
Por ahora estoy con el ejemplo de ximorro que por sierto todavia tengo
algunas complicaciones pero es por que soy un novato en esto :smt003
se me avian cruzado las funciones del boton empezar con el de cerrar
pero creo que ya lo tengo solucionado y sigo avanzando.
cuando termine les comentare como me fue y tambien voy a probar el
ejemplo de juantxo, Nunca esta de mas entender mas de autoit :smt038
GRACIAS DE NUEVO !! por su tiempo y enseñansa espero llegar lejos :smt001