AnteriorPosterior

8- Varias ventanas nuestras

  Curso: Introducción a Delphi y Lazarus

8- Varias ventanas nuestras

Introducción a Delphi y Lazarus, por Nacho Cabanes

Hay tres aspectos importantes a tener en cuenta cuando manejamos múltiples ventanas (o formularios): cómo crearlas, cómo mostrarlas y cómo leer el valor que nos devuelven o lo que se ha introducido en ellas.

Crear una nueva ventana (o formulario) en nuestro programa es muy fácil. En el entorno de desarrollo de Lazarus (o Delphi) escogemos, en el menú "Archivo", la opción "Nuevo Formulario" (si está en inglés, será el menú "File", opción "New Form" (o pulsar el botón de "Nuevo Formulario" -"New Form"- de la barra de herramientas).

En versiones "no muy antiguas" de Delphi tenemos también asistentes que nos ayudarán a crear rápidamente otros formularios más aplicados: ventanas de diálogo con los botones en horizontal o en vertical, ventanas de introducción de passwords, de acceso a bases de datos, incluso para crear distintos tipos de informes (listados). También puede ocurrir que en alguna versión nos pregunte si queremos que la ventana que acabamos de crear sea la principal (con un mensaje como "Generate main form?"). La respuesta que demos dependerá de nuestro caso. Yo prefiero crear primero el formulario principal y después los que dependen de él, así que yo respondería No a esa pregunta.

Una vez que tenemos las dos ventanas creadas, nos interesará que desde la primera (principal) se pueda entrar a la segunda (secundaria). Lo que haremos incluir una línea como ésta en la parte de nuestro programa que corresponda (por ejemplo, cuando el usuario pulse un cierto botón):

form2.show;

(He supuesto que nuestra segunda ventana se llama "Form2", que es el nombre que Lazarus y Delphi le dan por defecto).

Si cuando probemos a poner el programa en funcionamiento nos dice que no sabe lo que es "Form2" (es lo habitual, con un mensaje de error "unknown identifier"), deberemos indicarle dónde se encuentra, añadiendo al principio de la "implementation" de la unit que corresponde la ventana principal algo así:

uses unit2;

(también podríamos añadir unit2 al final de la lista de "uses" que ya aparecen al principio del fuente, en la "interface).

(Nuevamente, he supuesto que hemos conservado para la unit el nombre que Lazarus y Delphi le dan por defecto). Este es un paso que muchas versiones comerciales de Delphi normalmente darían por nosotros automáticamente, tras pedirnos confirmación con un mensaje (en inglés) parecido a "Unit 1 hace referencia a Form2, que esta en Unit2. ¿Quiere añadirlo a la sentencia Uses?".

Nuestras dos ventanas se verían así:

(## Falta imagen. Estará disponible muy pronto ##)


Cuando terminemos de usar la ventana, lo sencillo es "ocultarla" en vez de destruirla (porque no la hemos creado nosotros en el momento de mostrarla, sino que automáticamente Lazarus o Delphi la prepara como "AutoCreate" para que se cree ella sola en el momento de empezar, y por eso nosotros nos hemos limitado a hacerla visible).

Para ocultarla usaremos el método Hide. Entonces, automáticamente, la ventana principal volverá a ser la ventana activa. Si queremos que la ventana se oculte al pulsar un botón, haríamos algo como:

procedure TForm2.Button1Click(Sender: TObject);
begin
Hide;
end;


Para acceder a datos que están en otra ventana, la idea es muy sencilla si se recuerda cómo se manejan las clases y/o los registros en Pascal: para leer el texto (Text) de una línea de edición llamada Edit1 que se encuentra en una ventana llamada Form1 se podría hacer:

respuesta := form1.Edit1.Text;

Para manejar más de dos ventanas, no reviste ninguna dificultad extra.


Si la segunda ventana es una ventana modal, una ventana de diálogo que nos devuelva pocos valores, como Si o No, Cancelar o Aceptar, la mostraremos con "ShowModal" en lugar de "Show" (esto hace que no se pueda trabajar con la ventana principal hasta que no se cierre la secundaria). Entonces nos devolverá valores como mrYes, mrNo, mrOK o mrCancel, según el botón que pulsemos para cerrar la ventana:

if ventanaConfirmacion.ShowModal = mrCancel then ...

Actualizado el: 23-04-2007 19:30

AnteriorPosterior