|
Creando formularios automáticamente
Copyright © 2000 Ernesto
De Spirito
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).
|