La vie

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

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

Utilisez un langage de codage spécifique pour programmer les applications Delphi afin qu'elles affichent un indice 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 astuces pour les éléments de menu

En raison de la conception de Windows, même si vous définissez la valeur de la propriété hint sur un élément de menu, l'indicateur contextuel ne sera pas affiché. Toutefois, les éléments du menu Démarrer de Windows affichent des astuces. Le menu Favoris dans Internet Explorer affiche également des astuces pour les éléments de menu.

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

Windows n'expose pas les messages nécessaires à la prise en charge d'un événement OnMouseEnter traditionnel. Toutefois, 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 astuces contextuelles d’éléments de menu (info-bulles) aux menus de votre application Delphi, concentrez-vous sur le message WM_MenuSelect.

Conseils Popup

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

Voici comment créer une classe TMenuItemHint. Ceci est une indication veuve qui est réellement affichée 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) puis
commencer
si Msg.MenuFlag et MF_POPUP = MF_POPUP puis
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. À l'aide de 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 quel élément de menu survole la souris, 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énements OnCreate du formulaire.

Reste maintenant 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 (Sender: 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). ShowTimer est utilisé pour s'assurer que le conseil de l'application s'écoule avant l'affichage du conseil. HideTimer utilise Application.HintHidePause pour masquer la fenêtre de conseil après un intervalle spécifié.

Utilisation des astuces d'élément de menu

Certains pourraient dire que l'affichage d'aides pour les éléments de menu n'est pas une bonne conception, mais il est parfois préférable d'afficher des astuces d'éléments de menu plutôt que d'utiliser une barre d'état. Une liste d'éléments de menu récemment utilisée (MRU) en est un exemple. Un menu de barre de tâches personnalisé en est un autre.