Comment afficher les conseils d'élément de menu dans les applications Delphi

Utilisez un langage de codage spécifique pour programmer des applications Delphi afin d'afficher un conseil ou une info-bulle lorsque la souris survole un composant de menu. Si la propriété "ShowHint" est définie sur "true" et que vous ajoutez du texte à la propriété "hint", ce message s'affiche lorsque la souris est placée sur le composant (un TButton, par exemple).

Activer les conseils pour les éléments de menu

En raison de la façon dont Windows est conçu, même si vous définissez la valeur de la propriété hint sur un élément de menu, le conseil contextuel ne s'affichera pas. Cependant, les éléments du menu Démarrer de Windows affichent des conseils. Le menu des favoris dans Internet Explorer affiche également des conseils sur les éléments de menu.

Il est possible d'utiliser l'événement OnHint de la variable d'application globale dans Delphes applications pour afficher des conseils d'élément de menu dans une barre d'état.

Windows n'expose pas les messages nécessaires pour prendre en charge un événement OnMouseEnter traditionnel. Toutefois, le message WM_MENUSELECT est envoyé lorsque l'utilisateur sélectionne un élément de menu.

instagram viewer

L'implémentation WM_MENUSELECT de TCustomForm (ancêtre de TForm) définit l'indicateur d'élément de menu sur "Application. "Afin qu'il puisse être utilisé dans l'application. Événement OnHint.

Si vous souhaitez ajouter des conseils contextuels d'élément de menu (info-bulles) à vos menus d'application Delphi, concentrez-vous sur le message WM_MenuSelect.

Conseils contextuels

Puisque vous ne pouvez pas compter sur l'application. ActivateHint, méthode pour afficher la fenêtre de conseil pour les éléments de menu (car la gestion des menus est entièrement effectuée par les fenêtres), pour afficher la fenêtre de conseil, vous devez créer votre propre version de la fenêtre de conseil en dérivant une nouvelle classe à partir de "THintWindow".

Voici comment créer une classe TMenuItemHint. Ceci est une veuve indice qui s'affiche réellement pour éléments de menu!

Tout d'abord, vous devez gérer le message Windows WM_MENUSELECT:

type
TForm1 = classe(TForm)
...
privé
procédure WMMenuSelect (var Msg: TWMMenuSelect); message WM_MENUSELECT;
fin...
la mise en oeuvre
...
procédure
TForm1.WMMenuSelect (var Msg: TWMMenuSelect);
var
menuItem: TMenuItem; hSubMenu: HMENU;
commencer

hérité; // de TCustomForm (pour que Application. Un indice est attribué)
menuItem: = néant;
si (Msg. MenuFlag <> $ FFFF) ou (Msg. IDItem <> 0) ensuite
commencer
si Msg. MenuFlag et MF_POPUP = MF_POPUP ensuite
commencer
hSubMenu: = GetSubMenu (Msg. Menu, Msg. IDItem);
menuItem: = Self. Menu. FindItem (hSubMenu, fkHandle);
fin
autre
commencer
menuItem: = Self. Menu. FindItem (Msg. IDItem, fkCommand);
fin;
fin; miHint. DoActivateHint (menuItem);
fin
; (* WMMenuSelect *)

Info rapide: le message WM_MENUSELECT est envoyé à la fenêtre du propriétaire d'un menu lorsque l'utilisateur sélectionne (mais ne clique pas) un élément de menu. En utilisant la méthode FindItem de la classe TMenu, vous pouvez obtenir l'élément de menu actuellement sélectionné. Les paramètres de la fonction FindItem se rapportent aux propriétés du message reçu. Une fois que nous savons sur quel élément de menu la souris se trouve, nous appelons la méthode DoActivateHint de la classe TMenuItemHint. La variable miHint est définie comme "var miHint: TMenuItemHint" et est créée dans le formulaire OnCreate gestionnaire d'événements.

Maintenant, ce qui reste est l'implémentation de la classe TMenuItemHint.

Voici la partie interface:

TMenuItemHint = classe(THintWindow)
privé

activeMenuItem: TMenuItem;
showTimer: TTimer;
hideTimer: TTimer;
procédure HideTime (Sender: TObject);
procédure ShowTime (expéditeur: TObject);
Publique

constructeur Créer (AOwner: TComponent); passer outre;
procédure DoActivateHint (menuItem: TMenuItem);
destructeur Détruire; passer outre;
fin
;

Fondamentalement, la fonction DoActivateHint appelle la méthode ActivateHint de THintWindow à l'aide de la propriété Hint de TMenuItem (si elle est affectée). Le showTimer est utilisé pour s'assurer que la HintPause de l'application s'écoule avant que l'astuce ne s'affiche. HideTimer utilise Application. HintHidePause pour masquer la fenêtre d'indication après un intervalle spécifié.

Utilisation des conseils d'élément de menu

Alors que certains pourraient dire que ce n'est pas une bonne conception d'afficher des conseils pour les éléments de menu, il existe des situations où l'affichage des conseils pour les éléments de menu est bien mieux que d'utiliser une barre d'état. La liste des éléments de menu les plus récemment utilisés (MRU) en est un exemple. Un menu de barre des tâches personnalisé en est un autre.