2011-11-17 17 views
5

¿Es posible crear una aplicación MDI utilizando FireMonkey en el sentido tradicional de muchos documentos formularios/marcos y un formulario maestro?Interfaz MDI con FireMonkey

Estoy interesado específicamente porque ya no hay controles de MDI en los formularios .. ¿Ha sido reemplazado por algo diferente?

EDIT: Adición a la pregunta, al crear formularios secundarios, que presentaron por separado en la barra de tareas, incluso las OpenDialogs ..

+0

Supongo que eso se arreglaría eventualmente ya que las Actualizaciones de XE2 todavía se lanzan. – Kromster

Respuesta

5

Aquí es uno de los enfoques que puede utilizar:

1) Crear sus formas individuales, normal, excepto que use un TLayout, llámalo "LayoutMain", (alClient alineado) como padre de todos los controles en ese formulario.

2) En su "formulario maestro", cuando quiera traer una instancia de formulario para comportarse como lo haría con una interfaz MDI, cree un TLayout (llámelo "FormContainer" o algo así), colóquelo como hijo de eso (alineado a la parte superior) otro TLayout (llámalo "FormHeader"), que contiene los controles individuales para el título del formulario, los botones Minimizar/Maximizar/Cerrar y cualquier otra cosa que quieras en el encabezado "marco". Esto se llamacompuesto.

3) Crear una instancia de su formulario secundario (pero no lo muestran), entonces los padres que la instancia principal TLayout "LayoutMain" a su forma principal TLayout "FormContainer".

4) En el TLayout mencionado anteriormente (con el nombre "FormHeader"), déle los eventos OnMouseDown y OnMouseMove para proporcionar la capacidad de arrastrarlo alrededor del formulario maestro.

Cuando desee maximizar el formulario secundario dentro del formulario maestro, simplemente establecería la propiedad de alineación externa "FormContainer" de TLayout en alClient, recordando almacenar sus valores originales Top, Left, Width y Height dentro del formulario instancia para que pueda recuperarlos al presionar el botón Restaurar.

Ciertamente, esta es una solución bastante complicada, pero a mi leal saber y entender, esta es la única forma de lograr lo que está intentando hacer con FireMonkey tal como existe hoy (circa Actualización 2).

No esperaba que Embarcadero proporcionara ninguna forma de emulación MDI como parte de FireMonkey "out of the box", ya que MDI se considera un enfoque anticuado.

La solución más moderna sería usar Docking, como lo hace RAD Studio IDE. Esto proporciona lo mejor de ambos mundos, brindando al usuario la libertad de elegir qué formas secundarias quiere vincular con el formulario maestro, o mostrarlas por su cuenta (o cualquier combinación de arreglos acoplados).

+0

Gracias por una buena respuesta, sin duda ayudará. Para mi caso, estaba buscando una solución más canónica que me permitiera tener varias ventanas MDI con TFMXHandles únicos (que convertiría a plataformas HWND para iniciar contextos OpenGL en ellas). Mi solución actual es crear varias formas, pero lamentablemente no actúan bien juntas: el orden Z y el enfoque de la barra de tareas es incorrecto. – Kromster