Comprender propietario vs. padre en aplicaciones de Delphi

Cada vez que coloca un panel en un formulario y un botón en ese panel, establece una conexión "invisible". El formulario se convierte en el propietario del Botón, y el Panel está configurado para ser su padre.

Cada componente de Delphi tiene una propiedad de Propietario. El propietario se encarga de liberar los componentes propios cuando se libera.

Similar pero diferente, la propiedad Parent indica el componente que contiene el componente "hijo".

Padre

Principal se refiere al componente en el que está contenido otro componente, como TForm, TGroupBox o un TPanel. Si un control (primario) contiene otros, los controles contenidos son controles secundarios del primario.

Principal determina cómo se muestra el componente. Por ejemplo, las propiedades Izquierda y Superior son todas relativas a la Principal.

La propiedad principal se puede asignar y cambiar durante el tiempo de ejecución.

No todos los componentes tienen el padre. Muchas formas no tienen un padre. Por ejemplo, los formularios que aparecen directamente en el escritorio de Windows tienen Parent configurado en nil. Un componente HasParent El método devuelve un valor booleano que indica si al componente se le ha asignado un padre o no.

Usamos la propiedad Parent para obtener o establecer el padre de un control. Por ejemplo, coloque dos paneles (Panel1, Panel2) en un formulario y coloque un botón (Botón1) en el primer panel (Panel1). Esto establece la propiedad principal del botón en Panel1.

 Button1.Parent: = Panel2; 

Si coloca el código anterior en el evento OnClick para el segundo Panel, cuando hace clic en Panel2, el botón "salta" de Panel1 a Panel2: Panel1 ya no es el padre del botón.

Cuando desee crear un TButton en tiempo de ejecución, es importante que recordemos asignar un padre, el control que contiene el botón. Para que un componente sea visible, debe tener un padre para mostrarse dentro.

ParentThis y ParentThat

Si selecciona un botón en el momento del diseño y mira el Inspector de objetos, notará varias propiedades "para padres". los ParentFont, por ejemplo, indica si la Fuente utilizada para el subtítulo del Botón es la misma que la utilizada para el elemento primario del Botón (en el ejemplo anterior: Panel1). Si ParentFont es verdadero para todos los botones en un panel, cambiar la propiedad de fuente del panel a negrita hace que todos los subtítulos en el panel usen esa fuente (negrita).

Propiedad de controles

Todos los componentes que comparten el mismo padre están disponibles como parte de Control S propiedad de ese padre. Por ejemplo, los controles pueden usarse para iterar sobre todos los elementos secundarios del control con ventana.

El siguiente fragmento de código se puede usar para ocultar todos los componentes contenidos en Panel1:

 para ii: = 0 a Panel1.ControlCount - 1 hacer

   Panel1.Controles [ii]. Visible: = falso;