En Visual Basic, cuando uno referencia una propiedad o método de un formulario éste se crea automáticamente si es necesario. En Delphi podemos emular este comportamiento con un pequeño truco...

Creando formularios automáticamente

Copyright © 2000 Ernesto De Spirito

JfControls Library - para Delphi y C++ Builder

Si ha programado en Visual Basic, probablemente sepa de lo que estamos hablando: cuando referencia una propiedad o un método de un formulario, éste se carga automáticamente si es necesario. Por ejemplo, el siguiente código generará una excepción en Delphi si Form2 no ha sido creado previamente:

Form2.Show;

Sin embargo funcionaría perfectamente en Visual Basic (sin el punto y coma, por supuesto), y podemos hacer que también funcione en Delphi con este pequeño truco:

unit Unit2;

interface

uses ...;

type
  TForm2 = class(TForm)
    ...
  end;

  function Form2: TForm2;

var
  // Form2: TForm2;

implementation

{$R *.DFM}

var
  RealForm2: TForm2;

function Form2: TForm2;
begin
  if RealForm2 <> nil then
    Form2 := RealForm2
  else
    Application.CreateForm(TForm2, Result);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  RealForm2 := Self;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  RealForm2 := nil;
end;

...

end.

Lo que hicimos fue reemplazar la variable Form2 con una función del mismo nombre y tipo. Esta función usa una variable "oculta" (declarada en la sección implementation) -RealForm2- para verificar si el formulario está creado o no (y en este último caso lo crea automáticamente). En los eventos OnCreate y OnDestroy del formulario establecemos el valor de esta variable oculta en la dirección del formulario o nil respectivamente. El valor inicial es nil (Delphi inicializa cadenas y variables objeto).

EurekaLog - Capture y registre cada excepción!