FoxPro/Visual FoxPro - crear formularios en ejecucion

   
Vista:

crear formularios en ejecucion

Publicado por wenceslao (134 intervenciones) el 16/01/2014 19:36:37
Buenas tardes a todos, resulta que estoy haciendo una aplicacion para facturacion y contabilidad, yo en otros programas he visto que en ejecucion de la aplicacion, si el usuario quiere agregar un formulario con determinado nombre, lo puede parametizar y darle nombre y le dice donde quiere que se muestre, luego de ello el formulario creado aparece en el menu de la aplicacion.
Ustedes me pueden dar una idea de como hacer eso?? y si fuera posible un ejemplo de uno de ellos??

De antemano gracias.

Saludos desde Colombia
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

crear formularios en ejecucion

Publicado por Fidel José (558 intervenciones) el 18/01/2014 16:51:01
Se trata de un formulario que, de acuerdo a los parámetros se arma con una o varias clase container que tienen toda la funcionalidad encapsulada. La parametrización debe guardarse en una tabla y es lo que lee el Init del form para iniciarse.

Este ejemplo, supone que tenemos una biblioteca de clase MzGrid.vcx con diversos elementos, entre ellos, una clase Container llamada "CntRecup". Para el ejemplo supongo que la biblioteca vcx está incluida en el proyecto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PROCEDURE NewForm()
 
RELEASE oform
PUBLIC oform
oform=NEWOBJECT("form")							&& crea un formulario
oform.newobject("oCnt1","CntRecup","MzGrid")	&& agrega un contenedor
												&& obj: CntRecup
												&& de la vcx MzGrid
WITH oform
	* Dimensiona el form
	.Height=.oCnt1.Height+2			&& ajusta el alto del form al alto del Container
	.Width=.oCnt1.Width+2                      && ajusta el ancho del form al alto del container
	.Top=5
	.Left=10
	* ubica el objeto agregado en el form
	.ocnt1.top=1
	.ocnt1.left=1
	* Establece la propiedad visible
	.oCnt1.Visible=.t.
	.Visible=.t.
ENDWITH
 
ENDPROC

Toda la funcionalidad se resuelve en cada uno de los container de clase, porque el formulario no existe. Se crea al vuelo. Acá no puse ningún parámetro, pero podría ser algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
PROCEDURE Newform(xcParam, xnTop, xnLeft )
* Por simplicidad coloco un solo parámetro. Los valores se leerán de la tabla que se llena cuando el usuario elige ua parametrización determinada. La estrategia pasa por generar tantas clase Containers como sean necesarias y coordinar correctamente los parámetros de selección de clase container con algunos otros que puedan significar algún valor particular de inicio o uso.
LOCAL lcContainer
DO case
	CASE xcParam="1"
		Lccontainer="CntRecup"
	CASE xcParam="2"
		lcContainer="CntCompra"
	CASE xcParam="3"
		lcContainer="CntVende"
	OTHERWISE
		MESSAGEBOX("Error de parámetro")
		RETURN
ENDCASE
 
RELEASE oform
PUBLIC oform
oform=NEWOBJECT("form")
oform.newobject("oCnt1",lcContainer,"MzGrid")
 
WITH oform
	* Dimensiona el form
	.Height=.oCnt1.Height+2			&& ajusta el alto del form al alto del Container
	.Width=.oCnt1.Width+2                      && ajusta el ancho del form al alto del container
	.Top=xnTop
	.Left=xnLeft
	* ubica el objeto agregado en el form
	.ocnt1.top=1
	.ocnt1.left=1
	* Establece la propiedad visible
	.oCnt1.Visible=.t.
	.Visible=.t.
ENDWITH
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar