Verwenden Sie eine bestimmte Programmiersprache, um Delphi-Anwendungen so zu programmieren, dass ein Hinweis oder eine QuickInfo angezeigt wird, wenn Sie den Mauszeiger über eine Menükomponente bewegen. Wenn die Eigenschaft "ShowHint" auf "true" gesetzt ist und Sie der Eigenschaft "hint" Text hinzufügen, wird diese Meldung angezeigt, wenn Sie den Mauszeiger über die Komponente bewegen (z. B. einen TButton)..
Aufgrund des Windows-Designs wird der Popup-Hinweis auch dann nicht angezeigt, wenn Sie den Wert für die Eigenschaft hint auf ein Menüelement festlegen. Die Windows-Startmenüelemente zeigen jedoch Hinweise an. Das Favoritenmenü im Internet Explorer zeigt auch Menüelementhinweise an.
Das Ereignis OnHint der globalen Anwendungsvariablen kann in Delphi-Anwendungen verwendet werden, um Menüelementhinweise in einer Statusleiste anzuzeigen.
Windows macht die Nachrichten, die zur Unterstützung eines herkömmlichen OnMouseEnter-Ereignisses erforderlich sind, nicht verfügbar. Die WM_MENUSELECT-Nachricht wird jedoch gesendet, wenn der Benutzer ein Menüelement auswählt.
Die WM_MENUSELECT-Implementierung von TCustomForm (Vorfahr von TForm) setzt den Menüelementhinweis auf "Application.Hint", damit er im Application.OnHint-Ereignis verwendet werden kann.
Wenn Sie Ihren Delphi-Anwendungsmenüs Popup-Hinweise (QuickInfos) für Menüelemente hinzufügen möchten, konzentrieren Sie sich auf die Meldung WM_MenuSelect.
Da Sie sich beim Anzeigen des Hinweisfensters für Menüelemente nicht auf die Application.ActivateHint-Methode verlassen können (da die Menüverarbeitung vollständig unter Windows erfolgt), müssen Sie eine eigene Version des Hinweisfensters erstellen, indem Sie eine neue Klasse ableiten aus dem "THintWindow".
So erstellen Sie eine TMenuItemHint-Klasse. Dies ist ein Hinweisfenster, das für Menüelemente angezeigt wird!
Zunächst müssen Sie die Windows-Meldung WM_MENUSELECT verarbeiten:
Art
TForm1 = Klasse(TForm)
…
Privat
Verfahren WMMenuSelect (var Msg: TWMMenuSelect); Botschaft WM_MENUSELECT;
Ende…
Implementierung…
Verfahren TForm1.WMMenuSelect (var Msg: TWMMenuSelect);
var menuItem: TMenuItem; hSubMenu: HMENU;
Start
vererbt; // von TCustomForm (damit Application.Hint zugewiesen wird)
menuItem: = Null;
wenn (Msg.MenuFlag $ FFFF) oder (Msg.IDItem 0) dann
Start
wenn Msg.MenuFlag und MF_POPUP = MF_POPUP dann
Start
hSubMenu: = GetSubMenu (Msg.Menu, Msg.IDItem);
menuItem: = Self.Menu.FindItem (hSubMenu, fkHandle);
Ende
sonst
Start
menuItem: = Self.Menu.FindItem (Msg.IDItem, fkCommand);
Ende;
Ende; miHint.DoActivateHint (menuItem);
Ende; (* WMMenuSelect *)
Kurzinfo: Die Meldung WM_MENUSELECT wird an das Besitzerfenster eines Menüs gesendet, wenn der Benutzer einen Menüeintrag auswählt (aber nicht darauf klickt). Mit der FindItem-Methode der TMenu-Klasse können Sie das aktuell ausgewählte Menüelement abrufen. Parameter der FindItem-Funktion beziehen sich auf die Eigenschaften der empfangenen Nachricht. Sobald wir wissen, über welches Menüelement sich die Maus befindet, rufen wir die DoActivateHint-Methode der TMenuItemHint-Klasse auf. Die miHint-Variable ist als "var miHint: TMenuItemHint" definiert und wird im OnCreate-Ereignishandler des Formulars erstellt.
Jetzt bleibt noch die Implementierung der TMenuItemHint-Klasse.
Hier ist der Schnittstellenteil:
TMenuItemHint = Klasse(THintWindow)
Privat
activeMenuItem: TMenuItem;
showTimer: TTimer;
hideTimer: TTimer;
Verfahren HideTime (Absender: TObject);
Verfahren ShowTime (Absender: TObject);
Öffentlichkeit
Konstrukteur Create (AOwner: TComponent); überschreiben;
Verfahren DoActivateHint (menuItem: TMenuItem);
Zerstörer Zerstören; überschreiben;
Ende;
Grundsätzlich ruft die DoActivateHint-Funktion die ActivateHint-Methode von THintWindow unter Verwendung der Hint-Eigenschaft von TMenuItem auf (falls zugewiesen). Der showTimer wird verwendet, um sicherzustellen, dass die HintPause der Anwendung abläuft, bevor der Hinweis angezeigt wird. Der hideTimer verwendet Application.HintHidePause, um das Hinweisfenster nach einem bestimmten Intervall auszublenden.
Während einige sagen könnten, dass das Anzeigen von Hinweisen für Menüelemente kein gutes Design ist, gibt es Situationen, in denen das Anzeigen von Menüelementhinweisen wesentlich besser ist als die Verwendung einer Statusleiste. Eine zuletzt verwendete (MRU) Menüpunktliste ist ein solcher Fall. Ein benutzerdefiniertes Taskleistenmenü ist ein anderes.