Tips voor menu-items weergeven in Delphi-applicaties

click fraud protection

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

Schakel hints in voor menu-items

Vanwege de manier waarop Windows is ontworpen, wordt de pop-uphint niet weergegeven, zelfs niet als u de waarde voor de eigenschap hint instelt op een menu-item. De items in het startmenu van Windows 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 te gebruiken Delphi toepassingen om hints voor menu-items weer te geven in een statusbalk.

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

instagram viewer

De WM_MENUSELECT implementatie van de TCustomForm (voorloper van de TForm) zet de menu-item hint op "Application. Hint "zodat het kan worden gebruikt in de applicatie. OnHint-evenement.

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

Pop-uphints

Aangezien u niet op de applicatie kunt vertrouwen. ActivateHint-methode om het hintvenster voor menu-items weer te geven (aangezien het afhandelen van het menu volledig wordt gedaan door ramen), om het hintvenster weer te geven, moet u uw eigen versie van het hintvenster maken door een nieuwe klasse af te leiden uit "THintWindow".

Hier leest u hoe u een TMenuItemHint-klasse maakt. Dit is een hint-weduwe die daadwerkelijk wordt weergegeven menu items!

Eerst moet je het WM_MENUSELECT Windows-bericht afhandelen:

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; // van TCustomForm (zodat Application. Hint is toegewezen)
menuItem: = nihil;
als (Msg. MenuFlag <> $ FFFF) of (Msg. IDItem <> 0) vervolgens
beginnen
als Msg. MenuVlag en MF_POPUP = MF_POPUP vervolgens
beginnen
hSubMenu: = GetSubMenu (Msg. Menu, Msg. IDItem);
menuItem: = Zelf. Menu. FindItem (hSubMenu, fkHandle);
einde
anders
beginnen
menuItem: = Zelf. Menu. FindItem (Msg. IDItem, fkCommand);
einde;
einde; miHint. DoActivateHint (menuItem);
einde
; (* WMMenuSelect *)

Snelle info: het WM_MENUSELECT-bericht wordt naar het eigenaarvenster van een menu gestuurd wanneer de gebruiker een menu-item selecteert (maar er niet op klikt). Met behulp van de FindItem-methode van de TMenu-klasse kunt u het menu-item dat momenteel is geselecteerd, ophalen. Parameters van de FindItem-functie hebben betrekking op de eigenschappen van het ontvangen bericht. Als we eenmaal weten welk menu-item de muis is, noemen we de DoActivateHint-methode van de klasse TMenuItemHint. De miHint-variabele wordt gedefinieerd als "var miHint: TMenuItemHint" en wordt gemaakt in de Form's OnCreate event handler.

Wat nu overblijft, is de implementatie van de TMenuItemHint-klasse.

Hier is het interfacegedeelte:

TMenuItemHint = klasse(THintWindow)
privaat

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

constructeur Maak (AOwner: TComponent); overschrijven;
procedure DoActivateHint (menuItem: TMenuItem);
vernietiger Vernietigen; overschrijven;
einde
;

In principe roept de DoActivateHint-functie de ActivateHint-methode van THintWindow aan met de eigenschap TMenuItem's Hint (als deze is toegewezen). De showTimer wordt gebruikt om ervoor te zorgen dat de HintPause van de Applicatie verstrijkt voordat de hint wordt weergegeven. De hideTimer gebruikt Application. HintHide Pauze om het hintvenster te verbergen na een opgegeven interval.

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 daadwerkelijk weergeven van hints voor menu-items veel beter is dan het gebruik van een statusbalk. Een recentelijk gebruikte (MRU) lijst met menu-items is zo'n geval. Een aangepast taakbalkmenu is een ander.

instagram story viewer