| Artículos | 01 DIC 1995

Curso de Programación con Delphi (5)

Tags: Histórico
Menús, menús flotantes, teclas aceleradoras y hints
Jaime Peña.

El sistema de menús, incluyendo la utilización de menús flotantes, es uno de los apartados que habitualmente hemos de tratar con más cuidado en el diseño de nuestros programas.

En el pasado mes, hablábamos de cómo implementar funciones de respuestas a eventos, que se reciben como mensajes dirigidos hacia la ventana pertinente. En el presente artículo hablaremos del sistema de menús, en cuya implementación tienen importancia decisiva las funciones de respuesta a los mensajes de selección de opciones.

El sistema de menús clásico da soporte a un menú principal, cuyas etiquetas de entradas se encuentran en la barra de menú de la ventana principal. A la par, cuando se trata de aplicaciones MDI (Multiple Document Interface), se conjurará el sistema de menús de la aplicación con el de las ventanas hijas. Delphi nos proporciona soporte para ello mediante los métodos Merge y Unmerge.

Tal vez más importante sea poder dotar a nuestras aplicaciones de funcionalidad al botón derecho del ratón, desplegando un menú que se denominado contextual, emergente o flotante. Se trata de un estándar que se impone con la aparición de Windows 95 y al que tarde o temprano se irán adhiriendo todos los programas Windows, ya que es una de las exigencias de Microsoft para certificar las aplicaciones como diseñadas para Windows 95.

Un punto de referencia importante son las especificaciones SAA/CUA y la coherencia de disposición de opciones. Buenas líneas maestras se encuentran en los programas que acompañan a Windows (Paint, WordPad, etc.) y en las suites más conocidas del mercado (Microsoft Office 95, sería el ejemplo más actualizado de los que disponemos en el momento de escribir este artículo).

No podemos dedicar un espacio suficiente para comentar qué es exactamente lo que implican las especificaciones SAA/CUA, pero sí para llamar la atención acerca de que cuando diseñemos un sistema de menús procuremos homogeneizar las etiquetas de las diversas entradas y el orden. Es habitual que la primera entrada se etiquete Archivo y que allí se encuentren las opciones de abrir, cerrar y guardar documentos; también es común que haya una posible entrada denominada Edición y que la última sea Ayuda (ahora hay tendencia a etiquetarla con una interrogación cerrada, aunque personalmente nos gusta más seguir denominándola Ayuda).

Insertar un componente menú

En la paleta de componentes de Delphi, en su ficha Standard, encontramos dos que nos servirán para definir menús. Uno de ellos se refiere a un tipo de menú estándar, que pertenecerá a la clase TMainMenu, ya que es el empleado como menú principal en las ventanas Windows. El otro pertenece al tipo TPopupMenu y nos valdrá para definir menús flotantes (contextuales o emergentes), algo que trataremos más abajo.

Para insertar un menú principal, habrá que hacer clic sobre su icono en la paleta y luego insertarlo en el formulario, haciendo nuevamente clic sobre cualquier lugar de él. Posteriormente, una vez que veamos su icono en el formulario, haciendo doble clic sobre el icono del formulario del componente de la clase TMainMenu, se abrirá la ventana de diseño del sistema de menú principal (Menu Designer). También se trata de una herramienta altamente visual, que trabaja conjuntamente con el inspector de objetos (Object Inspector), con el fin de dotar de funcionalidad y definir propiedades a cada una de las entradas de menú.

Para insertar una etiqueta en la barra de menús, bastará con escribir su nombre en el recuadro que aparece sobre ella en el Menu Designer y pulsar la tecla retorno; observe cómo aparece su nombre en el inspector de objetos. Además, verá que se crean dos recuadros nuevos, uno sobre la barra de título (para insertar nuevas etiquetas de entradas de menú) y otra para incluir opciones en el menú recién creado.

Para incluir las diversas opciones que contendrá esa etiqueta de la barra de menús, simplemente habrá que escribir sus etiquetas. recuerde que para subrayar un carácter (carácter acelerador), debe anteponer el símbolo and ('&'). Por ejemplo: &Archivo sería el modo correcto de escribir la etiqueta de la entrada de menú Archivo, de manera que se subraye la 'A' mayúscula y se desplieguen sus opciones al pulsar la combinación de teclas Alt+A.

Los menús en cascada (submenús), se crean haciendo clic sobre la entrada de menú con el botón derecho del ratón y seleccionando, en el menú contextual que se despliega, la opción Create Submenu. Para moverse de unas entradas de menú a otras, use las teclas de cursores (resaltando si es preciso la ventana del diseñador de menús, si no es la actualmente activa). Cuando desee incluir una nueva opción, una vez escrita la etiqueta de la anterior, bastará pulsar la tecla retorno.

Para insertar un separador entre diversas opciones, deberá escribir un carácter guión ('-') y pulsar retorno. verá que se muestra un separador y la casilla de entrada de opciones se desplazará una posición más abajo. Una vez finalizado, cierre el diseñador de menús y este aparecerá en el formulario. Para volver al diseño, repita el doble clic sobre el icono en la ventana de diseño del formulario.

Ahora, si ejecuta la aplicación, verá que contiene el sistema de menús que usted diseñó. El siguiente paso será dotar de funcionalidad a las diversas opciones del menú principal. De igual forma, puede diseñar varios menús principales (de la clase TMainMenu), pero dado que sólo puede haber uno activo en cada ventana, deberá especificar en la propiedad Menu del formulario, cuál es el que se usará. Inicialmente se asigna el primero que hayamos diseñado, pero podremos cambiarlo. Posteriormente, durante la ejecución de la aplicación, también se puede cambiar el sistema de menús, asignando otro menú tipo TMainMenu a dicha propiedad, con una sentencia como Form1.Menu := MiNuevoMenu;

Teclas aceleradoras y funciones de respuesta

Una buena cantidad de opciones de menú lleven adjuntos los denominados teclas aceleradoras, o atajos de teclado. Se trata, como todos ustedes conocen, de combinaciones de teclas que permiten una rápida ejecución de dichas opciones, sin precisar navegar a través del sistema de menús. Normalmente, se les asignarán atajos de teclado a aquellas opciones más habitualmente utilizadas, como Archivo\Abrir o Edición\Copiar.

Para asignar unas teclas aceleradoras a una opción de menú, durante la etapa de diseño en el Menu Designer, haga clic sobre el área de edición de la propiedad ShortCut en el inspector de objetos y despliegue la lista de combinaciones de teclas. Allí, seleccione la tecla o combinación de teclas deseada. Si desea otra combinación que no aparece en la lista, por ejemplo Alt+F3, escríbalo así en dicha área. Recuerde que si ya diseñó un sistema de menús, haciendo un doble clic sobre su icono en la ventana de diseño del formulario, lo llevará nuevamente al Menu Designer. Finalmente, si ya no desea seguir trabajando en el diseño de menús cierre el Menu Designer y compruebe los atajos ejecutando su aplicación.

Un sistema de menús sirve para seleccionar y ejecutar acciones. Por ello, hemos de dotar de funcionalidad a sus diversas opciones, asignándoles funciones de respuesta a eventos. El sistema es muy similar a lo visto en el artículo pasado, cuando dotábamos de funcionalidad a botones de comando. Esto es, en la ventana de diseño del formulario, despliegue los menús como es habitual y haga clic sobre la opción a la que desee dotar de funcionalidad. Se abrirá la ventana del editor de código; nos remitimos al artículo anterior, en el que se explicó cómo escribir el correspondiente a la función de respuesta.

Observe que cuando está definiendo una función de respuesta, en la ventana del inspector de objetos también tiene la oportunidad de definir teclas aceleradoras, cambiar etiquetas y demás, igual que si tuviera a la vista la ventana del dise

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información