Skip to content

TForm.Create(AOwner)

Cómo elegir el parámetro correcto del constructor de un Formulario

Cuando creamos objetos en tiempo de ejecución que heredan de TControl, como lo es un TForm (objeto formulario), se le deberá pasar al constructor “Create” un parámetro que representa al “Propietario” de ese objeto.

La declaración del constructor es la siguiente:

constructor TCustomForm.Create(AOwner: TComponent);

Como vemos en la declaración anterior, el parámetro AOwner es el propietario del objeto TForm. El propietario del formulario es el responsable de liberar el formulario de la memoria asignada por el mismo, cuando sea necesario. El formulario aparece en la matriz de Componentes de su propietario y se destruye automáticamente cuando se destruye su propietario.

En este parámetro, tenemos tres opciones: AOwner := Nil , Self y Application.

Veamos la definición de cada uno de ellos:

  • Nil: especifica que el formulario no posee ningún propietario y, por lo tanto, el desarrollador es el único responsable de liberar el formulario creado (llamando a a la función FreeAndNil(vFormulario) cuando ya no se necesite el mismo)
  • Self: especifica que el propietario es el mismo objeto desde donde se invoque el método Create. Por ejemplo, si se está creando una nueva instancia de un formulario (vFormulario) desde el controlador OnClick de un botón, (donde este botón esta dentro del MainForm), self se refiere a “MainForm“. Por lo tanto, cuando se libera MainForm, también liberará a vFormulario.
  • Application: En este caso, el propietario del formulario creado será la misma aplicación, liberando al mismo cuando se cierra dicha aplicación.

Ejemplo de TForm.Create()

procedure TForm1.Button1Click(Sender: TObject);
var
  vFormulario1: TForm;
  vFormulario2: TForm;
  vFormulario3: TForm;
begin

  // Este Form lo tendrá que liberar el desarrollador
  vFormulario1 := TForm.Create(Nil);

  // Este Form se libera al cerrar el Form padre (TForm1)
  vFormulario2 := TForm.Create(Self);

  // Este Form se libera al cerrar la aplicación
  vFormulario3 := TForm.Create(Application);
end;