2010-03-19 18 views
7

Per motivi estetici, voglio mostrare un modulo sopra un altro modulo, proprio come se fosse un componente, ad esempio come un TPanel. Esso dovrebbe ridimensionare con il genitore, muoversi come esimo eparent è drageed dalla sua barra del titolo, eccDelphi - modulo nel modulo

----------------------------- 
| main form component 1  | 
----------------------------- 
| main | the 'embedded' | 
| form | form goes here | 
|comp 2|     | 
----------------------------- 

posso fare questo? Se é cosi, come?


ora sto appoggiato verso MDI ...

+0

Vedere http://stackoverflow.com/questions/2340318/how-can-i-visually-design-a-component-in-c-builder. –

+2

Chiamiamo "docking" (il modulo incorporato va qui). –

risposta

21

Inserisci un pannello in cui desideri che il modulo incorporato sia in fase di progettazione. In fase di esecuzione, creare il modulo, quindi impostare la proprietà Parent del modulo incorporato nel pannello.

procedure TParentForm.FormCreate(ASender: TObject); 
begin 
    FEmbeddedForm := TEmbeddedForm.Create(self); 

    FEmbeddedForm.Parent := Panel1; 
    FEmbeddedForm.Align := alClient; 
    FEmbeddedForm.Visible := True; 

end; 

Edit:

Se si desidera interrompere il titolo della finestra e il bordo venga visualizzata, aggiungere questo al fondo della FormCreate()

LForm.Caption := ''; 
    LForm.BorderStyle := bsNone; 

BTW, non sto sostenendo usando i moduli parentali sopra i frame, solo rispondendo alla domanda. I frame sono fantastici (li uso sempre), ma non sono esattamente uguali a quelli di Forms. Sono quasi esattamente come un pannello con controlli su di esso.

Ad esempio, un frame non ha un evento OnCreate, né un evento OnShow, che può essere doloroso a volte quando li riutilizzi e hai bisogno di quel tipo di comportamento.

N @

+2

@Nat: .Parent utilizza un TWinControl, non un WindowHandle. Mi sono preso la libertà di sistemare il tuo codice. –

+0

Qualcuno sa se settare Parent differisce in qualche modo da TForm.ManualDock con align = alClient? –

+0

@Fransois: Grazie! Hai ragione! La fine di una lunga settimana ... @Warran P: 'ManualDoc()' può avere effetti interessanti, continuo ad impostare Parent a meno che non stia davvero "aggancia" un modulo. – Nat

11

È possibile utilizzare un frame.

1

Native MDI win32 è considerato "fuori moda". Penso che potresti cercare qualcosa come la libreria JEDI JvDocking. Lo uso per emulare MDI ma senza utilizzare il supporto MDI win32.

+0

Grazie per il suggerimento (+1). Sto usando componenti TMS e non voglio mescolare troppe cose di terze parti. Proverò il suggerimento di metterlo su un pannello. – Mawg

Problemi correlati