Cómo mostrar sugerencias de elementos de menú en aplicaciones de Delphi

Use un lenguaje de codificación específico para programar las aplicaciones de Delphi para mostrar una sugerencia, o información sobre herramientas, cuando el mouse se desplaza sobre un componente del menú. Si la propiedad "ShowHint" está establecida en "true" y agrega texto a la propiedad "pista", este mensaje se mostrará cuando el mouse se coloque sobre el componente (un TButton, por ejemplo).

Habilitar sugerencias para elementos de menú

Debido a la forma en que está diseñado Windows, incluso si establece el valor de la propiedad de sugerencia en un elemento del menú, la sugerencia emergente no se mostrará. Sin embargo, los elementos del menú de inicio de Windows muestran sugerencias. El menú de favoritos en Internet Explorer también muestra sugerencias de elementos de menú.

Es posible utilizar el evento OnHint de la variable de aplicación global en Delphi aplicaciones para mostrar sugerencias de elementos de menú en una barra de estado.

Windows no expone los mensajes necesarios para admitir un evento OnMouseEnter tradicional. Sin embargo, el mensaje WM_MENUSELECT se envía cuando el usuario selecciona un elemento del menú.

instagram viewer

La implementación WM_MENUSELECT del TCustomForm (antepasado del TForm) establece la sugerencia del elemento del menú en "Aplicación". Sugerencia "para que pueda usarse en la Aplicación. Evento OnHint.

Si desea agregar sugerencias emergentes de elementos de menú (información sobre herramientas) a los menús de su aplicación Delphi, concéntrese en el mensaje WM_MenuSelect.

Sugerencias emergentes

Ya que no puede confiar en la Aplicación. Método ActivateHint para mostrar la ventana de sugerencias para los elementos del menú (ya que el manejo del menú se realiza completamente por Ventanas), para que se muestre la ventana de sugerencias, debe crear su propia versión de la ventana de sugerencias derivando una nueva clase de "THintWindow".

Aquí se explica cómo crear una clase TMenuItemHint. Esta es una pista de viuda que en realidad se muestra para elementos de menú!

Primero, debe manejar el mensaje de Windows WM_MENUSELECT:

tipo
TForm1 = clase(TForm)
...
privado
procedimiento WMMenuSelect (var Msg: TWMMenuSelect); mensaje WM_MENUSELECT;
final...
implementación
...
procedimiento
TForm1.WMMenuSelect (var Msg: TWMMenuSelect);
var
menuItem: TMenuItem; hSubMenu: HMENU;
empezar

heredado; // de TCustomForm (para que la aplicación. Pista asignada)
menuItem: = nulo;
Si (Mensaje MenuFlag <> $ FFFF) o (Mensaje IDItem <> 0) luego
empezar
Si Msg. MenúBandera y MF_POPUP = MF_POPUP luego
empezar
hSubMenu: = GetSubMenu (Msg. Menú, mensaje IDItem);
menuItem: = Self. Menú. FindItem (hSubMenu, fkHandle);
final
más
empezar
menuItem: = Self. Menú. FindItem (Msg. IDItem, fkCommand);
final;
final; miHint. DoActivateHint (menuItem);
final
; (* WMMenuSelect *)

Información rápida: el mensaje WM_MENUSELECT se envía a la ventana del propietario del menú cuando el usuario selecciona (pero no hace clic) un elemento del menú. Usando el método FindItem de la clase TMenu, puede obtener el elemento de menú actualmente seleccionado. Los parámetros de la función FindItem se relacionan con las propiedades del mensaje recibido. Una vez que sabemos qué elemento de menú está sobre el mouse, llamamos al método DoActivateHint de la clase TMenuItemHint. La variable miHint se define como "var miHint: TMenuItemHint" y se crea en el formulario OnCreate controlador de eventos.

Ahora, lo que queda es la implementación de la clase TMenuItemHint.

Aquí está la parte de la interfaz:

TMenuItemHint = clase(THintWindow)
privado

activeMenuItem: TMenuItem;
showTimer: TTimer;
hideTimer: TTimer;
procedimiento HideTime (remitente: TObject);
procedimiento ShowTime (remitente: TObject);
público

constructor Crear (AOwner: TComponent); anular;
procedimiento DoActivateHint (menuItem: TMenuItem);
incinerador de basuras Destruir; anular;
final
;

Básicamente, la función DoActivateHint llama al método ActivateHint de THintWindow utilizando la propiedad Hint de TMenuItem (si está asignada). ShowTimer se utiliza para garantizar que la sugerencia de pausa de la aplicación transcurra antes de que se muestre la sugerencia. HideTimer usa la aplicación. SugerenciaHidePause para ocultar la ventana de sugerencias después de un intervalo especificado.

Uso de sugerencias de elementos de menú

Si bien algunos podrían decir que no es un buen diseño mostrar sugerencias para los elementos del menú, hay situaciones en las que mostrar sugerencias de elementos del menú es mucho mejor que usar una barra de estado. La lista de elementos de menú utilizada más recientemente (MRU) es uno de esos casos. Un menú de barra de tareas personalizado es otro.

instagram story viewer