Página 1 de 1

Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 9:48 am
por XeviCOMAS
Resulta que tengo un Formulario que lo utilizo en mi aplicación, y éste está "diseñado" en
nFormType ftMDICHILD

Bien, pues en alguna ocasión, veo necesario utilizar ese form, pero no como CHILD, sinó como un form independiente, Modal, por ejemplo.

Pues como veo en la ayuda de Xailer, nFormType... asignable solo en diseño.

Intento "diseñar" antes de crear al llamar el Form, pero no me funciona!!!

Código: Seleccionar todo

   WITH OBJECT TFrmMoviments():New( self )
   :nFormType := ftNORMAL
   :Create()
   :nFormType := ftNORMAL  //ni antes ni después del Create()
   :ShowModal()
   END
Alguna solución???


Gracias por vuestro tiempo.

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 11:53 am
por ftwein
Olá.

Tente com

Código: Seleccionar todo

WITH OBJECT TFrmMoviments()
   :nFormType := ftNORMAL
   :New( self )
   :ShowModal()
END

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 12:59 pm
por XeviCOMAS
No me sirve. Ya lo habia probado.

Gracias.

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 7:01 pm
por ignacio
Buenas tardes Xevi,

Aquí lo tienes.

Saludos

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 7:32 pm
por XeviCOMAS
Gracias por responder, Ignacio.

Tu ejemplo funciona correctamente, solo que, el Form está declarado en el IDE como ftNORMAL y lo cambias a ftMDICHILD.

Ahora bien. Si declaramos en el IDE el Form como ftMDICHILD, no funciona igual. No obtengo el mismo resultado.

Código: Seleccionar todo

METHOD Menu1Item1Click( oSender, oMenu ) CLASS TForm1
/*
   WITH OBJECT TForm2()
      :nFormType := ftMDICHILD
      :New( Self )
      :Create()
      :nLeft := 0
      :nTop := 0
      :Show()
   END WITH
*/
   WITH OBJECT TForm2():New( Self )
      :nLeft := 0
      :nTop := 0
      :Create()
      :Show()
   END WITH

RETURN Nil

//------------------------------------------------------------------------------

METHOD Menu1Item2Click( oSender, oMenu ) CLASS TForm1
/*
   WITH OBJECT TForm2():New( Self )
      :Create()
      :ShowModal()
   END WITH
*/
   WITH OBJECT TForm2():New( Self )
      :nFormType := ftNORMAL
      :Create()
      :ShowModal()
   END WITH
RETURN Nil

De esta manera, al abrir el form noMDI, el programa se pierde, hay que provocar el cierre forzado.

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 7:40 pm
por ignacio
Pues no tienes más que hacerlo como te digo ;-)

Un saludo

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 8:26 pm
por XeviCOMAS
Pues si... es una solución. Sólo que mis aplicaciones estan desarrolladas en entorno MDI... bien cambiaré de momento la que quiero utilizar de esta forma, y ya iré viendo.

Ahora estoy cambiando el "xip". Quiero pasar a utilizar pestañas, que es como creo que se están desarrollando las aplicaciones hoy en dia.
El entorno MDI creo que está porque ya estava, pero va siendo cada vez mas en desuso.

Gracias por responder.

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 10:14 pm
por bingen
Nosotros dejamos de usar MDI hace 8 años, era muy pesado, consumia recursos y enlentecía la ejecución.

Pasamos todo a pestañas como tu dices y fue un cambio muy bueno.

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 11:18 pm
por Hurricane
holla,
hoje eu criei um exemplo e funcionou bem, misturei com outros forms ftMDICHILD, ftNORMAL
Depois de você testar na sua aplicação, reporte o resultado, e coloque uma imagem.

Há alguns anos eu criei uma rotina para converter ftNORMAL para ftMDICHILD e abrir em FOLDERPAGE, mais simples que XAILER\SAMPLES\....

uso:
frmCliente() // original ftMDICHILD (designer)
frmCliente(.t.) // Modal

Código: Seleccionar todo

function frmCliente( lModal )
   local oFrm

   HB_Default(@lModal, .f.)

   //oFrm:=LoadFrm( 'TFrmCliente' ) // <-- depois crie a sua lógica de verificação.

   if oFrm # nil // <-- depois crie a sua lógica de verificação.
      MsgInfo('Form in use: ' + oFrm:cText)
      oFrm:setFocus()

   elseif lModal
      with object TFrmCliente()
         :lModal:=.T.
         :lCentered:=.t.
         :New(Application:oActiveForm)
         :ShowModal()

      end with
   else
      with object TFrmCliente():New(Application:oMainForm)
         :show()
      end with
   endif
   return nil
XeviCOMAS escribió:Resulta que tengo un Formulario que lo utilizo en mi aplicación, y éste está "diseñado" en
nFormType ftMDICHILD

Bien, pues en alguna ocasión, veo necesario utilizar ese form, pero no como CHILD, sinó como un form independiente, Modal, por ejemplo.

Pues como veo en la ayuda de Xailer, nFormType... asignable solo en diseño.

Intento "diseñar" antes de crear al llamar el Form, pero no me funciona!!!

Re: Formulario MDI o NORMAL

Publicado: Jue Feb 14, 2019 11:28 pm
por XeviCOMAS
Exacto!!!

Funciona PERFECTAMENTE.

Muchas gracias.

Re: Formulario MDI o NORMAL

Publicado: Sab Feb 16, 2019 12:44 pm
por jfgimenez
XeviCOMAS escribió: Tu ejemplo funciona correctamente, solo que, el Form está declarado en el IDE como ftNORMAL y lo cambias a ftMDICHILD.

Ahora bien. Si declaramos en el IDE el Form como ftMDICHILD, no funciona igual. No obtengo el mismo resultado.
La explicación la tienes dentro del .xfm. Échale un vistazo y lo verás.

Cuando es ftNORMAL, no se guarda esa propiedad, porque ese es su valor por defecto. Por lo tanto, cuando tú cambias su valor por código, antes de que se ejecute CreateForm(), se queda con el valor que tú has puesto.

En cambio si la pones a ftMDICHILD en diseño, entonces sí que se guarda en el .xfm, y por mucho que quieras cambiarla por código, al ejecutarse CreateForm() vuelve a poner lo que pusiste en diseño.