Hoe menu-itemhints worden weergegeven in Delphi-toepassingen

Gebruik een specifieke codeertaal om Delphi-toepassingen te programmeren om een ​​hint of knopinfo weer te geven wanneer de muis over een menuonderdeel zweeft. Als de eigenschap "ShowHint" is ingesteld op "true" en u tekst toevoegt aan de eigenschap "hint", wordt dit bericht weergegeven wanneer de muis over de component wordt geplaatst (bijvoorbeeld een TButton).

Hints inschakelen voor menu-items

Vanwege de manier waarop Windows is ontworpen, wordt de pop-uphint niet weergegeven, zelfs als u de waarde voor de eigenschap hint instelt op een menu-item. De Windows menu-items in het startmenu geven echter wel hints weer. Het favorietenmenu in Internet Explorer geeft ook hints voor menu-items weer.

Het is mogelijk om de OnHint-gebeurtenis van de globale toepassingsvariabele in Delphi-toepassingen te gebruiken om menu-itemhints in een statusbalk weer te geven.

Windows geeft niet de berichten weer die nodig zijn om een ​​traditioneel OnMouseEnter-evenement te ondersteunen. Het bericht WM_MENUSELECT wordt echter verzonden wanneer de gebruiker een menu-item selecteert.

De WM_MENUSELECT-implementatie van de TCustomForm (voorouder van de TForm) stelt de menu-itemhint in op "Application.Hint" zodat deze kan worden gebruikt in de Application.OnHint-gebeurtenis.

Als u pop-uphints (knopinfo) van menu-items aan uw Delphi-applicatiemenu's wilt toevoegen, concentreer u dan op het WM_MenuSelect-bericht.

Pop-uphints

Omdat u niet kunt vertrouwen op de Application.ActivateHint-methode om het hintvenster voor menu-items weer te geven (omdat menuverwerking volledig door Windows wordt gedaan), moet u uw eigen versie van het hintvenster maken door een nieuwe klasse af te sluiten om het hintvenster weer te geven. uit het "THintWindow."

U kunt als volgt een klasse TMenuItemHint maken. Dit is een hint-weduwe die daadwerkelijk wordt weergegeven voor menu-items!

Eerst moet u het bericht WM_MENUSELECT Windows verwerken:

 type
TForm1 = klasse(TForm)
...
privaat
procedure WMMenuSelect (var Msg: TWMMenuSelect); bericht WM_MENUSELECT;
einde...
implementatie
...
procedure
TForm1.WMMenuSelect (var Msg: TWMMenuSelect);
var
  menuItem: TMenuItem; hSubMenu: HMENU;
beginnen

geërfd; // from TCustomForm (zodat Application.Hint wordt toegewezen)
menuItem: = nul;
als (Msg.MenuFlag $ FFFF) of (Msg.IDItem 0) vervolgens
beginnen
als Msg.MenuFlag en MF_POPUP = MF_POPUP vervolgens
beginnen
hSubMenu: = GetSubMenu (Msg.Menu, Msg.IDItem);
menuItem: = Self.Menu.FindItem (hSubMenu, fkHandle);
einde
anders
beginnen
menuItem: = Self.Menu.FindItem (Msg.IDItem, fkCommand);
einde;
einde; miHint.DoActivateHint (menuItem);
einde
; (* WMMenuSelect *)

Snelle info: het bericht WM_MENUSELECT wordt naar het eigenaarvenster van een menu verzonden wanneer de gebruiker een menu-item selecteert (maar er niet op klikt). Met behulp van de FindItem-methode van de TMenu-klasse krijgt u het menu-item dat momenteel is geselecteerd. Parameters van de functie FindItem hebben betrekking op de eigenschappen van het ontvangen bericht. Zodra we weten welk menu-item de muis voorbij is, noemen we de methode DoActivateHint van de klasse TMenuItemHint. De variabele miHint is gedefinieerd als "var miHint: TMenuItemHint" en wordt gemaakt in de OnCreate-gebeurtenishandler van het formulier.

Wat overblijft is de implementatie van de klasse TMenuItemHint.

Hier is het interface-gedeelte:

TMenuItemHint = klasse(THintWindow)
privaat

activeMenuItem: TMenuItem;
showTimer: TTimer;
hideTimer: TTimer;
procedure HideTime (afzender: TObject);
procedure ShowTime (afzender: TObject);
openbaar

bouwer Maken (AOwner: TComponent); override;
procedure DoActivateHint (menuItem: TMenuItem);
destructor Vernietigen; override;
einde
;

Kortom, de functie DoActivateHint roept de methode ActivateHint van THintWindow aan met de eigenschap Hint van TMenuItem (als deze is toegewezen). De showTimer wordt gebruikt om ervoor te zorgen dat de HintPauze van de toepassing verloopt voordat de hint wordt weergegeven. De hideTimer gebruikt Application.HintHidePause om het hintvenster na een gespecificeerd interval te verbergen.

Tips voor menu-items gebruiken

Hoewel sommigen misschien zeggen dat het geen goed ontwerp is om hints voor menu-items weer te geven, zijn er situaties waarin het weergeven van menu-itemhints veel beter is dan het gebruik van een statusbalk. Een meest recent gebruikte (MRU) menu-itemlijst is zo'n geval. Een aangepast taakbalkmenu is een ander.