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

Utilisez un langage de codage spécifique pour programmer les 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 d'élément de menu.

Il est possible d'utiliser l'événement OnHint de la variable d'application globale dans les applications Delphi 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. Cependant, le message WM_MENUSELECT est envoyé lorsque l'utilisateur sélectionne un élément de menu.

L'implémentation WM_MENUSELECT de TCustomForm (ancêtre de TForm) définit l'indicateur d'élément de menu sur "Application.Hint" afin qu'il puisse être utilisé dans l'événement Application.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

Étant donné que vous ne pouvez pas compter sur la méthode Application.ActivateHint pour afficher la fenêtre de conseil pour les éléments de menu (car la gestion des menus est entièrement effectuée par Windows), pour obtenir la fenêtre de conseil affichée, vous devez créer votre propre version de la fenêtre de conseil en dérivant une nouvelle classe de la "THintWindow".

Voici comment créer une classe TMenuItemHint. Ceci est une veuve de conseil qui s'affiche réellement pour les é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é; // depuis TCustomForm (pour que Application.Hint soit assigné)
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 gestionnaire d'événement OnCreate du formulaire.

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é est un autre.