2010-03-19 41 views
7

Por razones estéticas, quiero mostrar un formulario en la parte superior de otro formulario, como si fuera un componente, digamos como un TPanel. Se debe cambiar el tamaño de la matriz, como moverse º eparent se grageado por su barra de título, etc.Delphi - formulario dentro del formulario

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

puedo hacer eso? ¿Si es así, cómo?


ahora estoy inclinando hacia MDI ...

+0

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

+2

Llamamos a eso "acoplamiento" (el formulario incrustado va aquí). –

Respuesta

21

Coloque un panel donde desee que su formulario incrustado esté en el momento del diseño. En tiempo de ejecución, cree el formulario, luego establezca la propiedad principal del formulario incrustado en el panel.

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

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

end; 

Editar:

Si desea detener el título de la ventana y el borde que se muestren, añadir esto a la parte inferior de la FormCreate()

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

Por cierto, no estoy abogando usando formas parentales sobre marcos, solo respondiendo la pregunta. Los marcos son geniales (los uso todo el tiempo), pero no son exactamente lo mismo que Formas. Son casi exactamente como un panel con controles sobre él.

Por ejemplo, un marco no tiene un evento OnCreate, ni un evento OnShow, que a veces puede ser doloroso cuando los reutiliza y necesita ese tipo de comportamiento.

N @

+2

@Nat: .Parent toma un TWinControl, no un WindowHandle. Me tomé la libertad de arreglar tu código. –

+0

¿Alguien sabe si la configuración de Parent difiere de TForm.ManualDock con align = alClient? –

+0

@Fransois: ¡Gracias! ¡Estás muerto verdad! El final de una larga semana ... @Warran P: 'ManualDoc()' puede tener efectos interesantes, sigo configurando Parent a menos que realmente esté 'acoplando' un formulario. – Nat

11

Se puede usar un frame.

1

MDI Win32 nativo se considera "fuera de fecha". Creo que podrías estar buscando algo como la biblioteca JEDI JvDocking. Lo uso para emular MDI pero sin usar el soporte win32 MDI.

+0

Gracias por la sugerencia (+1). Estoy usando componentes de TMS y no quiero mezclar demasiadas cosas de terceros. Voy a intentar la sugerencia de ponerlo en un panel. – Mawg

Cuestiones relacionadas