2011-11-17 6 views
5

È possibile creare un'applicazione MDI utilizzando FireMonkey in un senso tradizionale di molti moduli forme/frame e un modulo principale?Interfaccia MDI con FireMonkey

Sono particolarmente interessato poiché non ci sono più controlli MDI nei moduli. È stato sostituito con qualcosa di diverso?

EDIT: Aggiunta alla domanda, quando creo form figlio tutti hanno mostrato separatamente in barra delle applicazioni, anche le OpenDialogs ..

+0

Suppongo che sarebbe stato risolto alla fine poiché gli aggiornamenti XE2 sono ancora rilasciati. – Kromster

risposta

5

Ecco un approccio che è possibile utilizzare:

1) Creare le forme individuali come normale, tranne usare un TLayout, chiamarlo "LayoutMain", (alClient allineato) come padre di tutti i controlli su tale modulo.

2) Sul "modulo principale", quando si desidera portare un'istanza di modulo in comportarsi come se fosse un'interfaccia MDI, creare un TLayout (chiamarlo "FormContainer" o qualcosa), posizionare come figlio di (allineato in alto) un altro TLayout (chiamalo "FormHeader"), contenente i singoli controlli per i sottotitoli Form, i pulsanti Riduci/Ingrandisci/Chiudi e qualsiasi altra cosa desideri sull'intestazione "frame". Questo è chiamatoComposito.

3) Creare un'istanza del form figlio (ma non mostrarlo), poi di padre che di istanza primaria TLayout "LayoutMain" per il vostro modulo principale TLayout "FormContainer".

4) Sul TLayout precedentemente menzionato (con il nome "FormHeader"), assegnarlo agli eventi OnMouseDown e OnMouseMove per consentire di trascinarlo attorno al Modulo master.

Quando si desidera massimizzare il modulo figlio all'interno del modulo principale, è sufficiente impostare la proprietà di allineamento "FormContainer" di TLayout esterno su alClient, ricordando di memorizzare i valori Top, Left, Width e Height originali all'interno del modulo istanza in modo da poterli richiamare quando si preme il pulsante Ripristina.

Vero, questa è una soluzione abbastanza coinvolta, ma per quanto ne so, questo è l'unico modo per ottenere ciò che stai cercando di fare con FireMonkey così com'è oggi (circa Aggiornamento 2).

Non mi aspetto che Embarcadero fornisca qualsiasi forma di emulazione MDI come parte di FireMonkey "out of the box", poiché l'MDI è considerato un approccio obsoleto.

La soluzione più moderna sarebbe utilizzare Docking, come fa lo stesso RAD Studio IDE. Ciò fornisce il meglio di entrambi i mondi, dando all'utente la libertà di scegliere quali forme figlio si desidera collegare al modulo principale, o visualizzare al di fuori di quello da soli (o qualsiasi combinazione di arrangiamenti ancorati).

+0

Grazie per la buona risposta, sarà certamente di aiuto. Nel mio caso stavo cercando una soluzione più canonica che mi permettesse di avere diverse finestre MDI con TFMXHandles unico (che avrei convertito in piattaforma HWND per avviare i contesti OpenGL su di essi). La mia soluzione attuale è creare diverse forme, ma purtroppo non stanno agendo bene insieme - l'ordine Z e la messa a fuoco dalla barra delle applicazioni sono sbagliati. – Kromster