FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
MDI Child ¿Qué son y como funcionan?
Me podéis mandar a la porra porque imagino que esta duda, que al margen de todo la tengo desde que empecé a programar con BCB, ha de ser un concepto básico pero por más que he mirado, buscado y tratado de entender pero tal vez tenga un error básico de concepto y por ello no soy capaz de hacerlo.
SI yo en un aplicación defino un formulario como MDIChild, ¿significa que se abre DENTRO del que lo ha llamado? |
#2
|
||||
|
||||
No exactamente.
En una aplicación MDI, existe siempre un formulario "padre" MDIForm y el resto que son MDIChild. Cuando tu hablas de que "al abrir un formulario se abre dentro de otro", en realidad lo que pasa es que todos los MDIChild se abren dentro del MDIform (que es el equivalente al form principal de una aplicación normal). No se si te aclaro algo o te lío más... Creando aplicaciones MDI
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Gracias por la respuesta. Algo me has aclarado. Mi duda ahora es otra.
Yo tengo una aplicación que, en parte, es otra que ya está funcionando y ha habido que añadir otro trozo. Tal cual lo he planteado tengo un formulario que uso como menú principal y definido con FormStyle = fsNormal. Si yo ahora defino el formualrio llamado por este con FormStyle = fsMDIChild, ¿se abriría dentro de ese primero? ¿tendría que cambiar algo más como que ese menú principal pasara a ser fsMDIForm? |
#4
|
||||
|
||||
Un MDIchild necesita un MDIform.
Todo o demás es independiente.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
||||
|
||||
Vale. Eso lo había supuesto, por lógica. Mientras estoy haciendo pruebas.
Hasta ahora casi siempre que llamaba a un formulario lo hacía con ShowModal, pero he comprobado que de esta forma me da un error de ejecución. Lo he cambiado por Show pero de esa manera se muestra y automaticamente se cierra. |
#6
|
||||
|
||||
Cita:
Posiblemente porque después del ShowModal suele haber un Free (o FreeAndNil). Ahora con el Show hay que eliminar esa línea también.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
||||
|
||||
Tengo puesto un Action = Free en OnClose del formulario, pero no antes. Y eos es lo que me despista.
|
#8
|
||||
|
||||
Podéis mandarme a hacer gárgaras, que será lo más probable. Por aquello de ir probando y tratando de enterarme de este tema me he creado un proyecto con sólo dos formularios: uno (Unit1) que úncamente tiene un TMainMenu y un segundo con sólo un TLabeledEdit. Compilo y ejecuto y al seleccionar la opción del menú con este código:
Código PHP:
|
#9
|
||||
|
||||
Hola.
No puedes mostrar un formulario MDIChild con ShowModal, debes usar: Código PHP:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#10
|
||||
|
||||
Si lo pongo así no me muestra nada. En el adjunto está el proyecto con el que estoy haciendo pruebas. Está hecho en BCB6
|
#11
|
||||
|
||||
Hola.
En realidad si lo hace, pero como la línea próxima inmediata es: Código PHP:
Eso funciona con las ventanas modales ya que la línea del delete no se ejecuta hasta que no se cierra la ventana modal, pero con las no modales no sucede lo mismo. Y es más, como los formularios MDIChild deben tener su propiedad Visible verdadera por definición, si los vas creando en tiempo de ejecución no es necesario usar el método Show. Y si están minimizados, basta con que manejes las propiedades WindowState y BringToFront para traerlo al frente. Hice un simple código-ejemplo de manejo de formularios MDI que te adjunto. Los formularios MDIChild fueron quitados de la lista de auto creación de formularios. Saludos Pd: (Probado en C++ Builder 6)
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#12
|
||||
|
||||
¡Perfecto! Muchas gracias ecfisa. No pude probar el código que me enviaste porque me falta un paquete (webdsnap.bpi), pero con las explicaciones que me has dado y el código lo he visto todo mucho más claro.
|
#13
|
||||
|
||||
Es el problema de aprender a puñetazos, a lo bestia. Con los comentarios y ejemplos que me habéis dado he comprendido muchas cosa pero ahora me está ocurriendo un cosa curiosa. Ejecuto la aplicación y al seleccionar una de las opciones (de momento sólo tengo puesta una), durante un breve periodo de tiempo (menos de un segundo) veo el formulario pero automáticamente se expande para ocupar todo el área de cliente donde ha de abrirse y se "borran" todo los elementos del mismo viéndose solamente el menú que, como en el lanzador, es un TMainMenu. He estado probando con diferentes códigos y propiedades de este segundo formulario pero no soy capaz de encontrar que falla.
|
#14
|
||||
|
||||
Vale. Ya encontré el por qué me hacía lo que explicaba antes. El formulario MDIChild también tiene un TMainMenu y es lo que provoca que se expanda a todo lo que permite el MDIForm. Buscaremos alternativas.
|
#15
|
||||
|
||||
Hola.
Si, lamentablemente sólo puede haber un TMainMenu al mismo tiempo en una aplicación MDI. En una aplicación en que se me presentó ese problema le dí solución usando el componente TActionMainMenuBar en los formularios MDIChild. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#16
|
||||
|
||||
Yo lo he resuelto con un TToolBar dado que pueden asociarse los eventos del TMainMenu a cada uno de los botones. Dejo definido el menú pero elimino la propiedad Menu del TForm.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
MDI Child que contengo Otros MDI child. | Enan0 | Varios | 2 | 03-11-2012 01:24:14 |
Como funcionan los campos con formulas? | Alexandro | Conexión con bases de datos | 1 | 04-03-2009 10:54:29 |
Como funcionan los ReportBuilder? | Irina | Impresión | 1 | 17-06-2007 01:16:52 |
Como cargar un MDI Child de Delphi en un MDI Form de VC++ | onlytk | Varios | 0 | 10-12-2006 04:15:31 |
|