Al crear una aplicación en Delphi, cada una de las ventanas creadas son Form (Formularios) heredados de la clase TForm. En Delphi cada proyecto debe tener al menos un Form principal del programa.
A continuación veremos el ciclo de vida de un Form:
Form
Los Form son las Clases básicas de una aplicación Delphi, las ventanas reales con las que un usuario interactúa cuando se ejecuta la aplicación.
Los formularios o Form son básicamente objetos, poseen sus propias propiedades, eventos y métodos con los que se puede controlar su apariencia y comportamiento. Un formulario es en realidad un componente más de Delphi, pero a diferencia de otros, un Form no aparece en la paleta de componentes.
El primer Formulario de la Aplicación se crea al crear dicha aplicación, para ello ir al menú File | New | Application.
Este formulario recién creado será, por defecto, el formulario principal de la aplicación, el primer formulario que se creará en tiempo de ejecución.
Si queremos agregar un segundo (o más) formulario en nuestra aplicación deberemos ir al menú File | New | Form.
Form OnCreate
Siempre hablando en tiempo de ejecución, el evento OnCreate de un Form, se dispara cuando se crea el objeto TForm por primera vez.
Cuando se crea un formulario y su propiedad Visible es True, se producen los siguientes eventos en el orden indicado: OnCreate, OnShow, OnActivate, OnPaint, OnResize, OnPaint.
Si se requieren tareas de iniciación del formulario, como por ejemplo asignación de listas, variables, etc. se debe utilizar el controlador de eventos OnCreate para hacerlo.
A tener en cuenta: todo objeto inicializado en el evento OnCreate debe ser liberado por el evento OnDestroy, de esta manera no tendremos fugas de memoria.
Form OnShow
Luego del evento OnCreate, y después de haberse creado, se dispara el evento OnShow. Se llama al evento OnShow justo antes de que un formulario sea visible.
Además de los formularios principales, este evento ocurre cuando establecemos la propiedad Visible en True de todos los formularios de la aplicación.
Form OnActivate
El evento OnActivate es llamado cuando el programa activa el formulario, es decir, cuando el formulario recibe el foco de entrada. Utilice este evento, por ejemplo para cambiar qué control realmente obtiene el foco si no es el deseado.
Form OnPaint y OnResize
Los eventos como OnPaint y OnResize son llamados después de que se crea inicialmente el formulario, pero también se llaman repetidamente.
OnPaint ocurre antes de pintar cualquier control dentro del formulario y piensa muy bien en que lo puedes utilizar.
Vida y muerte de un Form
La creación de un Form, no tiene nada de complejo. Se crea el Form y todos sus componentes y comienza a esperar a que se disparen los eventos, y sigue así hasta que se cierra el formulario.
En cambio, la muerte o destrucción de un formulario posee varios eventos a tener en cuenta.
OnCloseQuery
Si queremos cerrar un formulario en tiempo de ejecución lo hacemos con el comando Close, o también lo podemos realizar con otros métodos, como por ejemplo Alt+F4 entre otros. En cualquiera de estos casos, el primer evento en dispararse es el OnCloseQuery.
Con este evento podemos interceptar el cierre del formulario y poder evitarlo si así lo deseamos, como por ejemplo para realizar la famosa pregunta ¿Está seguro de cerrar la aplicación?.
// Interceptamos el cierre del formulario
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean) ;
begin
if MessageDlg('Está seguro de cerrar la aplicación?', mtConfirmation, [mbOk, mbCancel], 0) = mrOk then
CanClose := True;
end;
Como vemos en el ejemplo anterior, el evento OnCloseQuery posee una variable llamada CanClose que determina si se cierra o no el formulario.
OnClose
Si el evento OnCloseQuery determina que el formulario debe cerrarse (CanClose := True;), inmediatamente después, se ejecuta el evento OnClose.
Algo parecido al CanClose del evento OnCloseQuery pasa en el evento OnClose, pero con el parámetro Action.
Dicho parámetro Action, lo podemos cargar con estos cuatro posibles valores:
- caNone: el cual no permite cerrar el formulario, igual que si pusiéramos CanClose := False en el evento OnCloseQuery.
- caHide: en logar de cerrarse el formulario, se oculta.
- caFree: El formulario se cierra y Delphi libera la memoria utilizada para él.
- caMinimize: en vez de cerrarse, el formulario se minimiza.
OnDestroy
El evento OnDestroy es el último evento en ejecutarse al cerrar el formulario. Lo podemos utilizar para operaciones opuestas al OnCreate.
Utilice este evento para destruir objetos creados en tiempo de ejecución, para liberar memoria o para grabar log’s.
Recuerde que cuando se cierra el formulario principal de una proyecto, la aplicación finaliza.