2012-10-10 29 views
6

Es posible establecer la Alineación en un TForm, por ejemplo establecer un formulario para alTop y otro para alClient, donde los dos formularios ocupan toda el área de la pantalla de la manera obvia. ¿Es esto algo sensato en una aplicación?¿De qué sirve las propiedades Align y Anchor en TForm?

También noté que las anclas están expuestas en los formularios, pero no puedo pensar para qué serían útiles (¿cambios de resolución? ¿Aplicaciones MDI?) ¿Alguna idea?

Editar: He hecho un video about this post para aclarar las cosas.

+4

Puede imitar una barra de tareas en el borde del escritorio, configurando 'Alinear' a, digamos,' alTop ' –

Respuesta

15

Puede utilizar un TForm como un control ordinario estableciendo su propiedad Parent:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    frmEmbed:= TForm.Create(Self); 
    frmEmbed.Parent:= Self; 
    frmEmbed.Width:= 50; 
    frmEmbed.Height:= 50; 
    frmEmbed.Align:= alRight; 
    frmEmbed.Anchors:= [akLeft, akBottom]; 
    frmEmbed.Visible:= True; 
end; 

debe comentar frmEmbed.Align:= alRight; línea para ver cómo funciona la propiedad Anchors.


Si usted está interesado en que lo anterior es utilizado: parented forma sin una barra de título es una alternativa a TFrame; los marcos no estaban disponibles con las primeras versiones de Delphi, por lo que se usaron los formularios parentales. Puede encontrarlos en el código heredado.

+0

Todavía uso formularios incrustados en el código actual. ¿Hay alguna razón por la que los formularios de nueva crianza estén limitados al código heredado? Me resulta más fácil dividir formularios complejos (generalmente hojas de pestañas diferentes) en formas múltiples en lugar de marcos. Me ayuda a mantener mi lógica dividida y limita el número de controles que tengo en cualquier forma. Normalmente configuro el padre en la hoja de pestañas y establezco Align: = alClient. –

3

Puede colocar un formulario dentro de otro formulario. Sin embargo, qué bueno eso funcionaría. En Delphi1 veces hubo controles especiales de terceros para enrutar el evento. Hoy parece funcionar más o menos de la caja, a excepción de los diálogos modales. Pruebe de esta manera:

procedure TMainForm.Button1Click(...); 
begin 
    with TForm.Create(Self) do begin 
     Caption := 'Internal one'; 
     Parent := Self; 
     Visible := True; 
    end;  
end;  

Quizás anclar y alinear tendría sentido en esta configuración. Después de todo, parece que se ha implementado el nuevo diseño de IDE de "una ventana".

1

Puede colocar un formulario dentro de cualquier otro componente del contenedor.

Eso es útil para el acoplamiento, f.i. puede acoplar formularios en pestañas de control de página, o en cualquier lugar realmente.

Eso también es útil como alternativa al TFrame: si diseña un marco como un TForm en lugar de un TFrame, no será incrustable en el tiempo de diseño y, por lo tanto, no podrá ser editado/saboteado por el diseño. editor de tiempo

Los TFrames incorporados pueden tener sus propiedades o eventos redefinidos en la forma en que están incorporados, y eso no siempre es deseable o práctico, especialmente cuando se desea que el marco sea fácilmente actualizable o refactorizable. Las propiedades modificadas del marco embebido terminan en el DFM, no en el PAS, y por lo tanto no se ven en tiempo de compilación, y no son fáciles de refactorizar/renombrar/etc.

2

Un caso simple es para un formulario sin leyenda (por ejemplo, el estilo metrópoli win-8) puede anclar un botón de salida en la esquina superior derecha.

Pero lo mejor es simplificar la creación de una forma compleja que responda a los cambios de tamaño ... Usando akLeft y akRight, puede hacer un espacio de relleno de control horizontal horizontalmente. Usar los 4 anclajes es similar a configurar un cliente para alclient, simplemente sin necesidad de rodearlo con otros paneles.

Gran parte de lo que puede hacer con los anclajes también se puede hacer con muchos paneles, pero a medida que la forma se vuelve más compleja se ensuciará y requerirá varios niveles de paneles sobre los paneles.

Por supuesto, usar una combinación de paneles y anclajes a menudo será la mejor respuesta.

+0

Creo que es posible que hayas malentendido la pregunta. Estoy realmente detrás de la utilidad de las propiedades de Anclas/Alineación en la clase TForm, es decir, para colocar el formulario en la pantalla, en lugar de usarlo para colocar controles en los formularios. – Alister

+0

Sí, entendí mal. –

+0

es posible que desee retirar la respuesta a continuación. – Alister