Info Delphi

La magia de la programación a tu alcance

Crear formularios

Hola a todos,

cuando, en nuestra aplicación, necesitamos crear un nuevo formulario y utilizamos alguna de las opciones a nuestra disposición, Delphi (aunque esto se puede cambiar), coloca este en la lista de creación automática (puedes ver esa lista en las opciones del proyecto).

Este comportamiento puede resultar incluso cómodo en pequeñas aplicaciones, pero cuando hablamos de varias decenas de formularios, aparte de la lentitud a la hora de abrir la aplicación, podemos tener serios problemas de gestión de recursos.

Para evitar esto, vamos a ver la posibilidad de manejar nosotros mismos este proceso.

Lo primero de todo es, a la hora de crear un nuevo formulario, deshabilitar la creación automática, para eso nos vamos al menú Project y pulsamos sobre Options…, la pestaña Forms nos muestra dos listas

creacion-ventanas

Solamente necesitas pasar el formulario desde la ventana de la izquierda a la de la derecha para que Delphi deje en tus manos toda su gestión, la creación, el manejo y la liberación de los recursos que utiliza.

Para crear y poder usar esa ventana de forma Modal hay varias opciones, la más habitual es definir una variable del mismo tipo que el formulario y crearlo, de esta forma:

procedure TForm1.CrearNuevo(Sender: TObject);
var
fNuevo: TForm2;
begin
fNuevo := TForm2.Create(Application);
fNuevo.ShowModal;
fNuevo.Free;
end;

Como verás, no es difícil gestionar el formulario de esta forma, pero hay formas más eficientes de hacerlo. Por ejemplo, ¿que pasaría si hay un problema a la hora de crear el formulario? pues que la memoria usada para la variable no se liberaría; la solución, encerrar el código en una instrucción try, de esta forma:

procedure TForm1.CrearNuevo(Sender: TObject);
var
fNuevo: TForm2;
begin
fNuevo := TForm2.Create(Application);
try
fNuevo.ShowModal;
finally
fNuevo.Free;
end;
end;

De esa forma protegemos los recursos de nuestra máquina, pero aún se puede mejorar…

Hemos usado una variable que, lógicamente, ocupa un lugar en memoria, ¿podríamos prescindir de ella?

procedure TForm1.CrearNuevo(Sender: TObject);
begin
with TForm2.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;

El resultado, un código más limpio, menos recursos ocupados y un procedimiento más seguro.

Saludos

Martes, 17 febrero 2009 Posted by | Delphi | 1 comentario