Como en un lenguaje de programación moderno (con extensión para orientación a objetos), en Lazarus - FreePascal tenemos dos formas de abrir formularios:
- De forma estática. Diseñas los formularios. Luego, al iniciar la aplicación se crean todos los formularios, aunque están ocultos. Cuando quieras lo haces visible en tiempo de ejecución.
- De forma dinámica. Cuando abres una aplicación como el Microsoft Word, tú no sabes cuantos formularios "de documento" vas a tener que abrir. El usuario puede abrir 1 documento o 20. Cada vez que haga clic en "Nuevo documento" hay que abrir un formulario.
1.-FORMA ESTÁTICA DE CREAR FORMULARIOS.
Diseñamos los formularios que necesitemos con Lazarus. Para crear un nuevo formulario vamos al MENÚ ARCHIVO, Opción NUEVO FORMULARIO.
Hay que tener en cuenta que cada formulario gráfico que hemos creado está descrito en una unidad (UNIT). Para verlo seleccionamos el formulario y vamos al MENÚ VER, Opción "EDITOR DE CÓDIGO FUENTE". El nombre de la unidad se encuentra en la primera línea del código fuente del formulario. Por ejemplo:
unit Unit1;
Si desde este form1 que está definido en Unit1, queremos llamar al form2, tenemos que incluir la definición de form2 dentró de la sección uses:
uses:
xxxxx, xxxxxx, xxxxxx, xxxxxx, unit2;
Ahora ya podemos "llamar" al form2 desde form1. Realmente la invocación sólo consiste en hacer visible el formulario. Eso es así porque al arrancar se crean todos los formularios que hemos diseñado.
form2.show;
2.-FORMA DINÁMICA DE CREAR FORMULARIOS.
Tenemos que pensar que cada formulario es un objeto. Nuestro programa puede necesitar abrir varios objetos de ese tipo (formularios de entrada, informes, etc.), aunque cada uno tenga datos diferentes.
Vamos al MENÚ PROYECTO, Opción OPCIONES DEL PROYECTO, y elegimos FORMULARIO. Saldrá esta ventana:
Pasamos los formularios que haya que abrir dinámicamente, de la columna "CREAR FORMULARIOS AUTOMÁTICAMENTE" a la de "FORMULARIOS DISPONIBLES".
En los eventos OnClose de los formularios tenemos que añandir lo siguiente para que libere la memoria:
CloseAction:= caFree;
Lo único que hay que hacer ahora para abrir el form2 desde el form1 es instanciar el objeto form2:
procedure Tform1.Button1Click(Sender: TObject);
var
frmDocumento: Tform2;
begin
frmDocumento:= Tform2.Create(Application);
frmDocumento.Show;
end;
Saludos.