Aplicaciones MDI usando clases

122 views
Skip to first unread message

Walter R. Ojeda Valiente

unread,
May 16, 2012, 9:28:06 PM5/16/12
to publice...@googlegroups.com
Hola a todos

Quiero hacer una aplicación MDI (Interfaz de Documentos Múltiples) usando clases basadas en formularios:
- Tengo una clase basada en formulario que tiene la propiedad SHOWWINDOW = 2 - As Top-Level form
- Tengo otras clases basadas en formulario las cuales quiero que estén dentro de la clase anterior (como la ventana de comandos del VFP está dentro de la ventana principal del VFP)

Sin embargo, cuando ejecuto el método SHOW() me muestra un pantallazo de esa clase y luego desaparece.

Haciendo lo mismo con un formulario funciona bien, pero con una clase basada en formulario no. ¿Alguien sabe el motivo y la solución?

Por supuesto que estableciendo la propiedad SHOWWINDOW = 1 - In top-level form y la propiedad WINDOWTYPE = 1 - Modal me muestra la clase basada en formulario pero no es lo que quiero, ya que de esa manera el usuario no puede interactuar con las demás clases basadas en formulario.

Saludos.

Walter.


Lewis López

unread,
May 16, 2012, 9:37:07 PM5/16/12
to publice...@googlegroups.com
Hola Walter debes hecerlo de esta manera.

oform.show(1)

Debe ejcutar bien, asi los trabajo y siempre he usado formularios de nivel sueperior.

SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia




From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: [vfp] Aplicaciones MDI usando clases
Date: Thu, 17 May 2012 01:28:06 +0000

Walter R. Ojeda Valiente

unread,
May 16, 2012, 9:48:33 PM5/16/12
to publice...@googlegroups.com
Gracias Lewis pero no es la solución.

Lo que quiero es mostrarle al usuario varias clases basadas en formulario y que él pueda hacer click en cualquiera de ellas y utilizarla.

Similar a lo que ocurre cuando estás diseñando un formulario: puedes hacer click sobre el formulario o sobre la ventana de propiedades.

No necesitas cerrar uno para utilizar la otra.

Saludos.

Walter.




From: lws_...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Wed, 16 May 2012 20:37:07 -0500

Luis Maria Guayan

unread,
May 16, 2012, 9:54:45 PM5/16/12
to publice...@googlegroups.com
Mira si este ejemplo te da una idea de lanzar formularios desde un formulario MDI

DO FORM (HOME(2) + "Solution\forms\sdiform.scx")

 
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Lewis López

unread,
May 16, 2012, 9:55:03 PM5/16/12
to publice...@googlegroups.com
Bueno en ese caso debes crear los form de la clase base y mostrarlos median Do form  usar la priedad Windowstipe=0 para que te permita
usar diferentes ventanas y no usar o llamar las clase mediam Newobject y luego usar Show().

Por que? 

Porque todas la formas llamadas de esa forma tomaran la propiedad windowsTipe=1 y no dejeran usar otra forma, ya que esta estará por encima
de las demas.


SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia



Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Thu, 17 May 2012 01:48:33 +0000

Lewis López

unread,
May 16, 2012, 9:58:16 PM5/16/12
to publice...@googlegroups.com
Me disculpo si estoy equivocado pero desde que incie con vfp siempre he trabajo formularios de nivel superior porque nunca me ha gustado el menú que genera.
Y según mi experiencia es así.


Saludos.


SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia



Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Thu, 17 May 2012 01:48:33 +0000

Walter R. Ojeda Valiente

unread,
May 16, 2012, 10:05:46 PM5/16/12
to publice...@googlegroups.com
Es que son clases basadas en formulario, las cuales creo con la función CREATEOBJECT() y muestro con el evento SHOW()

No sabía que en ese caso la propiedad WINDOWTYPE siempre valdrá 1, tendré que investigar al respecto.

En un formulario que tiene las propiedades:
Destkop = .F.
ShowWindow = 1 - In top-level form
WindowType = 0 - Modeless

funciona perfectamente, pero en una clase basada en formulario no. No hay caso, se empecina en no hacerlo, solamente muestra un pantallazo y desaparece.

Saludos.

Walter.




From: lws_...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Wed, 16 May 2012 20:55:03 -0500

Walter R. Ojeda Valiente

unread,
May 16, 2012, 10:07:46 PM5/16/12
to publice...@googlegroups.com
Coincidimos en eso, yo nunca usé el menú por defecto del VFP, pero lo que estoy requiriendo ahora es poder interactuar con varios formularios sin estar cerrándolos previamente. O sea, una aplicación MDI.

Saludos.

Walter.





From: lws_...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Wed, 16 May 2012 20:58:16 -0500

Lewis López

unread,
May 16, 2012, 10:08:03 PM5/16/12
to publice...@googlegroups.com

Así es porque no se carga el objeto form.

Mira el ejemplo de Luis M. Ese si te servirá.


SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia




From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Thu, 17 May 2012 02:05:46 +0000

Lewis López

unread,
May 16, 2012, 10:09:23 PM5/16/12
to publice...@googlegroups.com
Este ejemplo te debe funcionar, de Luis M.


SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia




Date: Wed, 16 May 2012 22:54:45 -0300
Subject: Re: [vfp] Aplicaciones MDI usando clases
From: luism...@gmail.com
To: publice...@googlegroups.com

Walter R. Ojeda Valiente

unread,
May 16, 2012, 10:17:19 PM5/16/12
to publice...@googlegroups.com
Interesante truco, trataré de implementarlo.

Saludos.

Walter.





Date: Wed, 16 May 2012 22:54:45 -0300
Subject: Re: [vfp] Aplicaciones MDI usando clases
From: luism...@gmail.com
To: publice...@googlegroups.com

Daniel Sánchez

unread,
May 18, 2012, 8:07:58 AM5/18/12
to publice...@googlegroups.com
Que extraño Walter, todas mis aplicaciones son MDI, solo cuando en algún momento requiero un form para obligar a tomar un valor para continuar uso form modal después con los demás puedes cambiar a cualquier otro form sin ningún problema.

Saludos


--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Walter R. Ojeda Valiente

unread,
May 18, 2012, 10:09:10 AM5/18/12
to publice...@googlegroups.com
Con formularios no tengo problemas, con clases basadas en formularios sí.

Saludos.

Walter.




Date: Fri, 18 May 2012 07:07:58 -0500

Subject: Re: [vfp] Aplicaciones MDI usando clases

Lewis López

unread,
May 18, 2012, 1:08:14 PM5/18/12
to publice...@googlegroups.com
Walter estube haciendo pruebas y en ves de usar oform.show(), se debe usar SHOW WINDOWS (oform.nane) y listo funciona perfecto.

Saludos.


SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia




From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Fri, 18 May 2012 14:09:10 +0000

Walter R. Ojeda Valiente

unread,
May 18, 2012, 3:41:30 PM5/18/12
to publice...@googlegroups.com
Hola Lewis

Sigue sin funcionarme.

¿Podrías decirme cuáles son los valores de las siguientes propiedades, tanto en tu formulario principal como en los formularios flotantes?

AlwaysOnTop
Desktop
MDIForm
ShowWindow
WindowType

y cualquier otra propiedad que te parezca relevante.

y si tienes el comando READ EVENTS, ¿en cuál lugar está?

Saludos.

Walter.





To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Fri, 18 May 2012 12:08:14 -0500

Daniel Sánchez

unread,
May 19, 2012, 12:21:46 AM5/19/12
to publice...@googlegroups.com
Si mal no recuerdo cuando se instancia objetos con createobject los objetos que crea lo hace con visible en false, así que viendo esto debo suponer que el formulario debe ocurrir algo parecido con algunas propiedades, seria bueno que después de crear tu objeto verifiques sus propiedades y en caso de tener valores diferentes le reasignes los valores, ahora que recuerdo tengo un formulario definido sin barra de titulo y cuando le doy createobject lo muestra con barra de titulo revisando, lo instancia y activo así.
Oini=createobjec("varios.iniaplicacion")
oini.show
oini.gotfocus
....

Talves te sirva para solucionar tu problema.

Lewis López

unread,
May 19, 2012, 1:16:56 AM5/19/12
to publice...@googlegroups.com
Hola Walter, a mi me funciona perfecto.


Hola Lewis

Sigue sin funcionarme.

¿Podrías decirme cuáles son los valores de las siguientes propiedades, tanto en tu formulario principal como en los formularios flotantes?

AlwaysOnTop=.f.
Desktop =.t. O .f. igual funciona
MDIForm = .T. O .F. Igual Funciona
ShowWindow =1 Para los Hijos y 2 para el padre
WindowType = 0

Solución.

No funciona.

Oform1=NEWOBJECT('mdi1','\formamdi\mdi')
SHOW WINDOW (Oform1.name) IN WINDOW (thisform.Name)

Si funciona.

PUBLIC Oform1
Oform1=NEWOBJECT('mdi1','\formamdi\mdi')
SHOW WINDOW (Oform1.name) IN WINDOW (thisform.Name)

Creo que está mas claro que el agua (de hace unos 100 años porque la de ahora mejor dicho...), pero sin embargo explico el por qué?

Sucede que cuando se instancia la clase sin publicar la variable (en este ejemplo Oform1) apenas se carga el objeto es eliminado junto con la variable, ya
que esta esta en modo local y se sabe que las variables en modo local el compilador las elimina apenas se dejan de usar, es por ello que se debe publicar
la variable para que el objeto se mantenga en memoria.


Saludos.
 

SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia




From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Aplicaciones MDI usando clases
Date: Fri, 18 May 2012 19:41:30 +0000

Luis Maria Guayan

unread,
May 19, 2012, 8:49:51 AM5/19/12
to publice...@googlegroups.com
Walter una pregunta: ¿El formulario principal MDI es Modal?

Porque tengo entendido que si se llama un formulario desde un formulario Modal, éste también se convierte en Modal.

Intenta que la clase del formulario MDI no sea modal.


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Guillermo Carrero

unread,
May 19, 2012, 8:32:04 PM5/19/12
to publice...@googlegroups.com
Hola Walter:

Intenta con este código para crear dos formularios MDI con opciones distintas.

*--Opción 1
PUBLIC oForm
oForm = CREATEOBJECT("FormTest")
oForm.SHOW()

*--Opción 2
_SCREEN.ADDPROPERTY("oForm2", CREATEOBJECT("FormTest"))
_SCREEN.oForm2.SHOW()

Esperando que resuelva tu problema,

Un saludo,

Guillermo Carrero

Walter R. Ojeda Valiente

unread,
May 20, 2012, 10:11:10 PM5/20/12
to publice...@googlegroups.com
Gracias Guillermo, probaré tu sugerencia.

Saludos.

Walter.




Date: Sat, 19 May 2012 17:32:04 -0700
From: guillerm...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Aplicaciones MDI usando clases

Lewis López

unread,
May 20, 2012, 10:35:31 PM5/20/12
to publice...@googlegroups.com
Hola Walter a mi me funciona perfecto.


Hola Lewis

Sigue sin funcionarme.

¿Podrías decirme cuáles son los valores de las siguientes propiedades, tanto en tu formulario principal como en los formularios flotantes?

AlwaysOnTop=.f.
Desktop =.t. O .f. igual funciona
MDIForm = .T. O .F. Igual Funciona
ShowWindow =1 Para los Hijos y 2 para el padre
WindowType = 0

Solución.

No funciona.

Oform1=NEWOBJECT('mdi1','\formamdi\mdi')
SHOW WINDOW (Oform1.name) IN WINDOW (thisform.Name)

Si funciona.

PUBLIC Oform1
Oform1=NEWOBJECT('mdi1','\formamdi\mdi')
SHOW WINDOW (Oform1.name) IN WINDOW (thisform.Name)

Creo que está mas claro que el agua (de hace unos 100 año poruqe la de ahora mejor dicho), pero si embargo explico el pro que?

Sucede que cuando se instancia la clase sin publicar la variable (en este ejemplo Oform1) apenas se carga el objeto es eliminado junto con la variable, ya
que esta esta en modo loca y se sabe q las variables en modo local el compilador las elimina apenas se dejar de usar, es por ello que se debe publicar
la variable para que el objeto se mantenga en memoria.


Saludos.

SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia



Subject: RE: [vfp] Re: Aplicaciones MDI usando clases
Date: Mon, 21 May 2012 02:11:10 +0000

Mario Oviedo

unread,
Jun 8, 2012, 10:04:49 AM6/8/12
to publice...@googlegroups.com
buen hilo
Reply all
Reply to author
Forward
0 new messages