![]() |
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
||
|
|
|
CAPÍTULOS
La ventana principal
- Características del form
- Manipulación de componentes
- Propiedades de TForm
- Eventos de TForm
- Métodos de TForm
- Etiquetas de texto
- El control Edit
- El control Memo
- El control Button
- El control CheckBox
- El control RadioButton
- El control ListBox
- Barras de desplazamiento
- El control Bevel
- El componente Timer
- El control MaskEdit
- El control RichEdit
- El control StatusBar
- El control TrackBar
- Los controles ProgressBar, SpinButton, SpinEdit y UpDown
- El control HotKey
- El control HeaderControl
- El control PageControl
- El control TImageList
- El control MainMenu
- El control PopUp Menu
- Algunas ventanas predefinidas
- Uso de varios forms en la aplicación
- Los cuadros OpenDialog y SaveDialog
- Los cuadros FontDialog, ColorDialog y PrintDialog
- Los cuadros FindDialog y ReplaceDialog
SECCIONES
SITIOS RECOMENDADOS
OTROS SITIOS DE LA AUTORA
Curriculum vitae
A través del espejo
Weblog: Educación en Internet
Weblog: Uno por uno, uno; uno por uno, dos; uno por uno...
En línea desde el 7 de noviembre de 2000 |
6II. Uso de varios forms en la aplicaciónA pesar de que en el capítulo anterior vimos algunas funciones que nos facilita Delphi para no construir un form adrede pidiendo un dato o mostrando un mensaje, a buen seguro en nuestra aplicación vamos a necesitar tener más de un form, constituyendo cada uno las distintas pantallas de las que consta. En este punto vamos a ver cómo llevar a cabo una aplicación que gestione varios forms, como crearlos en tiempo de ejecución y como tenerlos accesibles desde el resto de los forms. Los forms de un proyecto pueden ser creados al inicio del programa, cuando éste se carga en memoria, de tal forma que podamos hacer referencia a ellos desde cualquier punto en que nos convenga. La creación automática de los forms se determina en la página Forms de las opciones del proyecto. Inicialmente, todos los forms aparecerán en la lista de la izquierda, Auto-create forms, indicando así que serán creados al inicio de la ejecución sin intervención nuestra. Sirviéndonos de los botones situados en la parte central, entre las dos listas, podremos mover forms de una lista a otra. Los forms que desplacemos a la lista Avaible forms no serán creados al inicio de la aplicación, por lo que antes de poder usarlos en el programa habrá que crearlos. Crear un formAntes de poder hacer referencia a un form desde otra Unit, habrá que añadir a la cláusula Uses de dicha Unit la referencia, es decir, el nombre de la Unit asociada al form. Vamos a suponer que tenemos un proyecto con dos forms y sus dos Units, UPrincipal y USecundaria. Para poder hacer referencia al segundo form desde el código del primero, añadiríamos a la cláusula Uses de ésta el módulo USecundaria. Esta operación se puede realizar automáticamente, mediante la opción Use Unit del menú File. Al seleccionarla aparece una lista con los módulos disponibles en el proyecto, sólo aquellos que no estén ya en uso en el módulo actual, pudiendo seleccionar cualquiera de ellos. Dada por supuesta la resolución de referencia anterior, para crear un form (que no esté en Auto-Create Forms, sino que esté en Available Forms) tendremos que utilizar el constructor Create, que actúa como el de cualquier otro componente, tomando un parámetro que será una referencia al objeto que se convertirá en padre del nuevo form. Otro método que nos permite crear un form en tiempo de ejecución viene dado por el objeto Application, del tipo TApplication y que se crea al comenzar el programa. Este objeto cuenta con un método, llamado CreateForm, al que pasándole como parámetro el tipo del form a crear y ua variable donde almacenar la referencia, creará el form de forma similar a como lo haría el constructor Create. Cuando el form que hemos creado no nos vaya a servir más, tendremos que liberar la memoria que se asignó al crearlo, para lo cual llamaremos al método Free con el que cuentan todos los forms. Vamos a aclarar un poco el punto del tipo del form. Cuando estamos creando un form, en tiempo de edición, ese form tiene asociado un Name, que es como se le distingue de otros objetos. Ahora bien, si nos fijamos en el inspector de objetos, cuando tenemos seleccionado el form, supongamos que con Name=FrmPrincipal, veremos que pone FrmPrincipal: TFrmPrincipal. Precisamente, TFrmPrincipal es el tipo del form que estamos creando. Así, en el caso que estamos describiendo, para crear dinámicamente el form vía el método de TApplication, escribiremos: Application.CreateForm(TFrmPrincipal, FrmPrincipal); siendo TFrmPrincipal el tipo del form, y FrmPrincipal el nombre del form concreto que es de ese tipo. Ventajas y desventajasSi en una aplicación se cuenta con muchos forms y todos ellos son creados al inicio, está claro que el programa consumirá una cantidad de memoria muy superior a la que sería necesaria si los forms se fuesen creando y liberando a medida que fuesen precisos. Otra de las desventajas que tiene la creación automática de todos los forms al inicio de la aplicación, es el tiempo que ésta tarda en cargarse y mostrarse activa. Obviamente, cuantos más forms se tengan que crear, el programa tardará más en ponerse en funcionamiento. Ahora bien, si se trata de una aplicación con pocos forms, tres o cuatro, entonces es más recomendable que se creen automáticamente al principio, pues minimizaremos los riesgos de que se nos olvide liberar los forms cuando ya no vayamos a usarlos. Nota a fecha 28 de marzo de 2005Dada la capacidad de los actuales ordenadores, no es necesario tener en cuenta estas consideraciones de ahorro. Podemos tener una aplicación con 30 forms creados en el momento de ejecutar la aplicación sin temer por el rendimiento, siempre y cuando estos forms no se ocupen de tareas que requieran de mucho proceso y/o memoria, en cuyo caso sí habría que estudiar crearlos sólo cuando fueran imprescindibles. Mostrar un formIndependientemente del método que hayamos seleccionado para crear un form, a la hora de utilizarlo en nuestro programa tendremos que hacerlo visible, para lo cual podemos utilizar varios métodos. Uno de ellos consiste en dar el valor True a la propiedad Visible, lo que causará la aparición inmediata del form. El efecto será similar si llmamos al método Show, ya que éste básicamente lo que hace es dar el valor True a esa propiedad, aunque, además, se asegura de que el form esté sobre los demás, llamando si es necesario al método BringToFront. Al mostrar el form mediante cualquiera de los dos métodos anteriores, estaremos visualizando una ventana no modal, lo que quiere decir que si el programa mantiene abiertas otras ventanas, podemos activarlas sin cerrar necesariamente aquella en la que nos encontramos actualmente. Para ocultar una ventana no modal podemos también utilizar dos métodos: llamar al método Hide, o bien damos el valor False a la propiedad Visible. Cuadros de diálogo modalesHay ocasiones en las que, al mostrar una ventana, lo que se persigue es que el usuario introduzca o tome alguna información y la cierre antes de continuar, no permitiendo el acceso a ninguna otra parte de la aplicación mientras tanto. A este tipo de ventanas se les llama cuadros modales, para lo que tendremos que mostrarla usando el método ShowModal. Un form que se muestra como modal suele tener unas características que le diferencian de una ventana normal. Por ejemplo, la inexistencia de los botones para minimizar y maximizar, la imposibilidad de modificar su tamaño en tiempo de ejecución o la incorporación de algunos botones generales, como OK o Cancel. A las ventanas que cuentan con estas características y se muestran como modales se les conoce como cuadros de diálogo. Para conseguir que cualquiera de nuestros forms se convierta en un cuadro de diálogo, tendremos que seguir por tanto las indicaciones anteriores. Para evitar la aparición de los botones de minimizar y maximizar y no permitir el cambio de tamaño durante la ejecución, bastará con que demos el valor bsDialog a la propiedad BorderStyle. Con el fin de hacerlo modal y que la aplicación no continúe su curso mientras no se cierre esta ventana, deberemos hacerla visible usando el método ShowModal. Por último, un cuadro de diálogo para cerrarse y ocultarse no utiliza el método Hide ni la propiedad Visible, sino que da un valor distinto de cero (o bien de la constante mrNone, que se define precisamente con el valor 0) a la propiedad ModalResult. Esto provoca la desaparición inmediata de la ventana y el valor asignado a la propiedad ModalResult será el mismo que devuelva la llamada al método ShowModal, que es una función. De esta forma al mostrar un cuadro de diálogo, el código que lleva a cabo esta operación puede obtener un valor de retorno que le servirá de información, de forma similar a como utilizábamos el valor de retorno devuelto por la función MessageDlg.
|