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 liberando los componentes de propiedad cuando se está liberando.
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 (padre) contiene otros, el controles contenidos son controles secundarios de los padres.
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 de Button 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 títulos de los botones 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;
Trucos de engaño
Los controles en ventana tienen tres características básicas: pueden recibir el foco de entrada, usan los recursos del sistema y pueden ser padres de otros controles.
Por ejemplo, el componente Button es un control en ventana y no puede ser el padre de algún otro componente; no puede colocar otro componente en él. La cuestión es que Delphi nos oculta esta característica. Un ejemplo es la posibilidad oculta de que una TStatusBar tenga algunos componentes como TProgressBar.
Propiedad
Primero, tenga en cuenta que un Formulario es el Propietario general de cualquier componente que resida en él (colocado en el formulario en tiempo de diseño). Esto significa que cuando se destruye un formulario, todos los componentes del formulario también se destruyen. Por ejemplo, si tenemos una aplicación con más de un formulario cuando llamamos al método Free o Release para un objeto de formulario, nosotros no tiene que preocuparse por liberar explícitamente todos los objetos en ese formulario, porque el formulario es el propietario de todos sus componentes.
Cada componente que creamos, en tiempo de diseño o ejecución, debe ser propiedad de otro componente. El propietario de un componente, el valor de su propiedad Propietario, se determina mediante un parámetro pasado al constructor Crear cuando se crea el componente. La única otra forma de reasignar el Propietario es usando los métodos InsertComponent / RemoveComponent durante el tiempo de ejecución. De forma predeterminada, un formulario posee todos los componentes y, a su vez, es propiedad de la Aplicación.
Cuando usamos la palabra clave Yo como parámetro para el método Create (el objeto que estamos creando es propiedad de la clase en la que está contenido el método), que generalmente es una forma Delphi.
Si, por otro lado, hacemos que otro componente (no el formulario) sea el propietario del componente, entonces estamos haciendo que ese componente sea responsable de deshacerse del objeto cuando se destruye.
Como cualquier otro Componente Delphi, El componente TFindFile personalizado se puede crear, usar y destruir en tiempo de ejecución. Para crear, usar y liberar un Componente TFindFile en la ejecución, puede usar el siguiente fragmento de código:
usos Encontrar archivo;
...
var FFile: TFindFile;
procedimiento TForm1.InitializeData;
empezar // form ("Self") es el propietario del componente // no hay Parent ya que este // es un componente invisible.
FFile: = TFindFile. Crear (auto);
...
final;
Nota: Dado que el FFile se crea con un propietario (Form1), no necesitamos hacer nada para liberar el componente; se liberará cuando se destruya el propietario.
Propiedad de componentes
Todos los componentes que comparten el mismo propietario están disponibles como parte de Propiedad de componentes de ese dueño. El siguiente procedimiento se utiliza para borrar todos los componentes de Edición que están en el formulario:
procedimiento ClearEdits (AForm: TForm);
var
ii: entero;
empezar
para ii: = 0 a Una forma. ComponentCount-1 hacer
Si (Una forma. Componentes [ii] es TEdit) luego TEdit (AForm. Componentes [ii]). Texto: = '';
final;
"Huérfanos"
Algunos controles (como los controles ActiveX) están contenidos en ventanas que no son VCL en lugar de en un control principal. Para estos controles, el valor de Parent es nulo y el ParentWindow La propiedad especifica la ventana principal que no es VCL. La configuración de ParentWindow mueve el control para que esté contenido en la ventana especificada. ParentWindow se establece automáticamente cuando se crea un control utilizando el CreateParented método.
La verdad es que en la mayoría de los casos no necesita preocuparse por los padres y los propietarios, pero cuando se trata de OOP y desarrollo de componentes o cuando desee llevar a Delphi un paso adelante, las declaraciones de este artículo lo ayudarán a dar ese paso más rápido.