![]() |
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
||
|
|
|
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 |
1. La ventana principalCuando ejecutamos Delphi, nos encontramos ante un entorno como el que se ve en la imagen, compuesto por varias partes:
En la barra de título de la ventana principal (la superior) vemos el nombre del entorno (Delphi) seguido del nombre del proyecto en curso. Bajo la barra de título encontramos el menú, con las opciones típicas de ficheros, herramientas, edición, etc. La parte inferior izquierda de la ventana principal está ocupada por un conjunto de botones, separados en tres grupos, como vemos en el gráfico:
Mediante ellos podemos cargar un nuevo proyecto, salvar el actual, etc. Cada uno de estos botones tiene una correspondencia con una opción del menú y algunos de ellos también tienen asociada una tecla de acceso rápido. Por último, en la ventana principal de Delphi, encontramos las paletas de componentes Delphi:
En principio la paleta activa es la llamada Standard, en la que podemos encontrar los componentes y controles más habituales en un programa. Las pestañas existentes en la parte superior nos permitirán acceder a la demás paletas de controles. Menú de OpcionesEste elemento contiene las diferentes opciones del programa agrupadas en varias principales. En Delphi el menú de opciones es un apartado con estructura casi fija (es decir, siempre las mismas opciones en el mismo lugar), salvando la posibilidad de añadir opciones mediante la creación de extensiones al entorno. La Paleta de BotonesOtro de los elementos de la ventana principal de Delphi es la Paleta de botones o acciones rápidas. Nos permite ejecutar de forma directa algunas de las opciones del menú sin necesidad de buscar por las distintas ventanas. Hay que observar que aquellos que no están disponibles se muestran en gris. Si dejamos un momento el cursor sobre un botón, aparecerá una pequeña etiqueta (un hint) que nos indicará de forma breve cuál es su función. Al igual que otros elementos de Delphi, la paleta de botones tiene asociado un menú emergente o contextual, que podemos hacer aparecer pulsando el botón derecho del ratón. Estas opciones nos permiten ocultar la barra de botones, pedir ayuda, decir si queremos que se muestren los hints o no, y personalizarla añadiendo/quitando botones en properties. Si ocultamos la barra de botones, siempre tenemos la opción de volver a mostrarla en el menú View, opción Speedbar. Paleta de ComponentesAquí podemos seleccionar los elementos que vamos a insertar en un form. Esta también puede ser personalizada mediante el menú emergente, idéntico al de los botones. Igualmente, si ocultamos la paleta de componentes, podemos volver a mostrarla con la opción Component Palette del menú View.Hay que hacer notar lo siguiente: en el panel de la derecha, además del icono y nombre del componente, también aparece el nombre del paquete en que está incluido. En Delphi, todo componente instalado en el entorno debe estar contenido en un paquete, bien de forma aislada o con otros. El FormLa interfaz de las aplicaciones que escribamos con Delphi estará basada en el uso de forms, nombre con el que se denomina a las ventanas del entorno Windows en las que se alojarán los distintos controles encargados de interactuar con el usuario. Cada vez que se inicia un nuevo proyecto, en pantalla veremos aparecer un form vacío, en el que podremos insertar los componentes que seleccionemos de la Paleta de componentes.Prácticamente en todas las aplicaciones contaremos con varios forms, uno principal, que será aquel que aparezca inicialmente al ejecutar el programa, y otros que se irán usando según las opciones que el usuario de la aplicación vaya seleccionando. En el menú File disponemos de opción New Form, que nos permite insertar un nuevo form en nuestro proyecto. Habitualmente en pantalla sólo tendremos visible aquel form sobre el que estemos trabajando en cada momento, mientras los demás permanecen cerrados (o no visibles por estar detrás del form activo). Para abrir uno de los forms ya existentes en el proyecto podemos
utilizar la opción Forms del menú View; o pulsar el
botón El Inspector de ObjetosOtro de los elementos que habitualmente está visibles en pantalla es el Inspector de objetos, cuya finalidad es facilitar la edición de las propiedades correspondientes al componente que se seleccione.
En la parte superior aparece el nombre del componente que se está inspeccionando así como su tipo. Es posible seleccionar cualquier componente de la lista desplegable asociada a este campo, o bien marcar el componente en el form. La columna izquierda de la ventana sirve para mostrar los nombres de las propiedades, mientras que en la derecha se muestran los valores que tienen actualmente. El visualizador de objetosLa mayor parte del tiempo, durante la creación de una aplicación con Delphi, estaremos trabajando con objetos, que pueden ser controles y objetos no visuales. Estos objetos disponen en su interior de miembros de datos, métodos, propiedades, pueden definir tipos, etc. Toda la información disponible sobre un cierto objeto la podemos obtener fácilmente mediante el visualizador, que podemos abrir mediante la opción Browse Symbol del menú Search, o bien con la opción Browser del menú View. Para poder analizar un cierto símbolo u objeto con el Visualizador, previamente debemos haber compilado nuestro programa, ya que es del código objeto de donde se obtiene esta información. Si no hemos compilado el programa, veremos que esta opción no está disponible.En el panel izquierdo del Visualizador podemos seleccionar el objeto del que queremos obtener información, mostrándose ésta de forma inmediata en el panel derecho de la ventana. En dicho panel existen en realidad tres páginas mostrándose en la primera, Scope, todos los tipos, constantes, métodos, etc., que tiene el objeto; en la segunda la jerarquía de tipos correspondiente al objeto, y en la tercera las referencias existentes a dicho objeto en el código de nuestro programa. En principio en la página Scope aparecen todos los identificadores existentes en el objeto, tanto si han sido definidos en él como si son heredados. Los botones existentes en la parte superior del Visualizador, tras la palabra Show, nos permiten seleccionar qué información queremos ver. Los primeros cinco botones nos permiten activar/desactivar la visualización de constantes, métodos, tipos, variables y propiedades, respectivamente. Los dos siguientes botones realizan la misma acción con aquellos miembros que son heredados o son virtuales. Por último tenemos cuatro botones más, que representan a los indentificadores privados, protegidos y públicos. El depósito de objetosAl seleccionar la opción New del menú File, Delphi abrirá la ventana del Depósito de objetos, en la que podremos optar por crear un nuevo elemento desde cero, o bien partir de otro ya existente. En la primera página de la ventana, que es la que aparece abierta por defecto, podemos optar por iniciar una nueva aplicación estándar, un nuevo componente, librería de enlace dinámico, módulo, etc. La página siguiente llamada ActiveX, contiene los elementos que facilitan la creación de controles ActiveX, forms Active, etc. A continuación tenemos una página que tendrá como título el nombre del proyecto sobre el que estamos trabajando. En ella aparecerán los forms que en ese momento existan en dicho proyecto, permitiendo crear otros nuevos a partir de ellos. En las páginas siguientes, Forms, Dialogs, Data Modules y Projects, encontraremos plantillas de forms, cuadros de diálogo, módulos de datos y proyectos, respectivamente, que podemos copiar en nuestro proyecto, utilizar o bien crear un nuevo elemento heredando las características de uno ya existente. Reutilización de Forms en un mismo proyectoPor defecto, cada vez que añadimos un nuevo form al proyecto, éste aparece vacío y es descendiente directo del tipo TForm. Como sabemos, un form no está compuesto sólo por un módulo de código, sino que, además, cuenta con un archivo en el que se almacena toda la información referida a las propiedades de los componentes que hay en el form, lo que dificulta la posibilidad de crear un form utilizando otro ya existente como base. Esta posibilidad, sin embargo, ha sido implementada en Delphi de una forma muy notable, permitiendo compartir forms entre distintos proyectos e incluso dentro de uno mismo, básicamente gracias a lo que Borland ha llamado herencia visual. Object Pascal es un lenguaje orientado a objetos y, como tal, permite utilizar el concepto de herencia, derivando nuevos objetos de otros ya existentes. Sin embargo, al definir un form hemos de tener en cuenta que no todo en él es código, ya que, además, existe el archivo DFM en el que se almacenan las propiedades de todos los componentes que existen en él. La estructura de estos archivos se ha visto modificada con el fin de aplicar al mismo concepto de herencia. Modificaciones a un form baseSin duda la posibilidad que acabamos de conocer, creando nuevos forms a partir de otros ya existentes, es muy potente, y puede ahorrarnos bastante trabajo. Sin embargo, ahí no acaba todo, ya que no estamos hablando de plantillas de forms que se copian en nuestro proyecto, sino de verdadera herencia, con todas las implicaciones que ello tiene.Imaginemos que hemos escrito la definición de un determinado objeto, del cual posteriormente hemos derivado un nuevo tipo. ¿Qué ocurre si ahora modificamos alguna de las características del tipo base? Está claro que el tipo descendiente o derivado también heredará de forma inmediata las modificaciones. Pues bien, esto mismo es aplicable a los forms que han sido heredados de otros. Al modificar por ejemplo la posición de un botón en el form base, lo que estamos modificando es el valor que se almacena en el archivo DFM de este form. Puesto que el form de entrada de datos no almacena en su archivo DFM información acerca de estos compnentes sino que la hereda, una modificación se muestra de forma inmediata. Personalización de un form derivadoUn objeto derivado de otro puede no sólo ampliar sus capacidades, añadiendo nuevos métodos o en el caso de un form, nuevos componentes, sino que además también es posible, si queremos, redefinir métodos que han sido heredados, modificando así el comportamiento por defecto del objeto. En un form que ha sido heredado de otro esto también es posible y podemos alterar las propiedades de aquellos elementos que inicialmente se encuentran definidos en el form base.Cuando se modifica una propiedad heredada, de un form derivado o de uno de los componentes existentes en él, al archivo de definición de este form se añade una entrada indicando que este componente es heredado, pero que se modifica el valor de dicha propiedad. En realidad es como si hubiéramos redefinido un método de cualquier objeto derivado de otro. Reutilización de Forms entre proyectosUn form que ha nacido en una determinada aplicación como base para el desarrollo de otras más especializadas, puede sernos útil posteriormente en otros programas, sobre todo si pretendemos que todos nuestros desarrollos compartan una apariencia común. Aunque podemos salvar el form que vamos a utilizar como base e incorporarlo con posterioridad a otros proyectos, resultará mucho más fácil añadirlo al Depósito de objetos de tal forma que la tengamos disponible en todo momento.Para añadir el form FormBase al Depósito de objetos, hay que situarse con el ratón sobre él, pulsar el botón derecho y seleccionar la opción Add To Repository. En la ventana que aparece, existe una lista con los nombres de todos los forms del proyecto actual. Seleccionamos el que queremos almacenar en el Depósito de objetos, a continuación damos un título u opcionalmente una descripción. En la lista desplegable Page habrá que seleccionar la página del Depósito de objetos en la que aparecerá el form; selecciona, por ejemplo la página Forms, que es el destino más lógico. Po último podemos facilitar el nombre del autor y un icono con el que se mostrará el form, finalizando el proceso con la pulsación del botón OK. Copiar, heredar o usar un form del depósito de objetos.Al abrir la página Forms del Depósito de objetos y seleccionar uno de los forms existentes, observamos que en la parte inferior de la ventana se activan tres opciones mediante las cuales podemos: copiar el form en nuestro proyecto, derivar un nuevo form a partir de él o bien utilizarlo directamente. La opción a usar dependerá obviamente del resultado que deseemos obtener.Copiar el form en nuestro proyecto, que es la primera opción disponible, añade a nuestro proyecto un nuevo módulo de código y un form, que inicialmente cuenta con unas determinadas propiedades y componentes. Este form que se ha añadido a nuestro proyecto no guardará ninguna relación con el form original, por lo que no se verá afectado por ninguna modificación posterior en este. La segunda opción es la que hemos estado usando en los supuestos anteriores, derivando un form que hereda las características de otro, pero que sigue estando relacionado con él, de tal forma que cualquier modificación en el form base tiene su reflejo inmediato en el form derivada. Por último tenemos la opción Use, que será la que utilicemos cuando en nuestro proyecto queremos usar el form original que existe en el depósito de objetos, no una copia ni un nuevo form derivado de él. Al utilizar un form de esta forma, cualquier modificación que se realice sobre él afectará de forma indirecta a cualquier otro form derivado de él, incluso de otras aplicaciones. Reutilización de proyectos enterosAdemás de forms individuales, Delphi también nos permite reutilizar aplicaciones o proyectos completos. De hecho en la página Projects del Depósito de objetos existen varios modelos de aplicación ya "prefabricados". Esta posibilidad está dirigida sobre todo a reducir el tiempo que se emplea en la creación del esqueleto de una aplicación, que suele ser siempre igual.Para añadir un proyecto al Depósito de objetos deberá abrir el menú Project y seleccionar la opción Add To Repository. Esto mostrará una ventana en donde tendremos que introducir un título, una descripción e indicar la página del Depósito de objetos en la que aparecerá. También podemos facilitar el nombre del autor y un icono que le identifique. Dado este paso, siempre que deseemos iniciar un nuevo proyecto podemos elegir la página adecuada del Depósito de objetos y hacer un doble clic sobre el icono, ahorrando mucho trabajo. Los proyectos que vayan a añadirse al Depósito de objetos para ser posteriormente utilizados, deberán almacenarse en un directorio que tan sólo contenga los elementos de ese proyecto. Al crearse una nueva aplicación tomando esa plantilla como base, Delphi preguntará cuál será el directorio del nuevo proyecto y copiará en él todos esos archivos. Personalizar el depósito de objetosAl igual que la mayoría de los elementos en Delphi, la ventana del Depósito de objtos cuenta con un menú emergente, que podemos hacer aparecer simplemente pulsando el botón derecho del ratón. En este menú podemos elegir entre diferentes modos de visualización, el orden de los elementos en la ventana y una opción, llamada Properties, que nos da acceso a la ventana de propiedades del Depósito de objetos, en la que podremos adecuarlo a nuestras preferencias. También podemos acceder a esta ventana mediante la opción Repository del menú Tools.Esta ventana cuenta con dos listas y una serie de botones que ocupan la parte central. La ventana de la izquierda contiene el nombre de cada una de las páginas del Depósito de objetos, así como un elemento, Object Repository, que representa a todos los anteriores juntos. La lista de la derecha muestra los nombres de los elementos existentes en la página que hay seleccionada actualmente en la lista de la izquierda, como forms y proyectos. Mediante los botones existentes en la parte central podemos acceder a la mayoría de las opciones disponibles. Añadir, eliminar y modificar páginasTanto el form como el proyecto que hemos añadido, en los pasos anteriores, al Depósito de objetos, han tenido como destino páginas que ya existían. Nada nos impide, sin embargo, añadir nuestra propia página con el fin de almacenar en ella los elementos definidos por nosotros, los cuales seguramente utilizaremos con mayor asiduidad. Para añadir una nueva página simplemente pulsamos el botón Add Page y, a continuación, facilitaremos el título que queremos darle.Eliminar una página del Depósito de objetos es aún más simple, ya que simplemente tenemos que seleccionarla y pulsar el botón Delete Page. Sin embargo, deberemos tener en cuenta que la página se habrá de encontrar vacía, no permitiéndosenos el borrado en caso contrario. Para dejar vacía una página seleccionamos cada uno de los elementos que ésta contiene y pulsamos el botón Delete Object. Los nombres de las páginas que ya existen pueden ser modificados. Esta es la finalidad del botón Rename Page. Gestión de los objetos de las páginasCada vez que se selecciona una página en la lista de la izquierda, en la que hay en la derecha aparecen los nombres e iconos de los objetos que ésta contiene. Haciendo un doble clic sobre cualquiera de ellos, podremos editar su título, descripción, icono, página en la que se almacena y autor.Si queremos mover objetos entre las páginas del Depósito de objetos, el método más rápido y fácil consiste en seleccionar la página Object Repository, que nos permite disponer en la lista de la derecha de todos los objetos existentes en ese momento. Tomando cualquiera de ellos y arrastrándolo hasta la página deseada lo moveremos.
|