Anzeigen von Menüelementhinweisen in Delphi-Anwendungen

click fraud protection

Verwenden Sie eine bestimmte Codierungssprache, um Delphi-Anwendungen so zu programmieren, dass ein Hinweis oder ein Tooltip angezeigt wird, wenn Sie mit der Maus über eine Menükomponente fahren. Wenn die Eigenschaft "ShowHint" auf "true" gesetzt ist und Sie der Eigenschaft "Hinweis" Text hinzufügen, wird diese Meldung angezeigt, wenn Sie mit der Maus über die Komponente fahren (z. B. einen TButton).

Aktivieren Sie Hinweise für Menüelemente

Aufgrund der Art und Weise, wie Windows gestaltet ist, wird der Popup-Hinweis nicht angezeigt, selbst wenn Sie den Wert für die Hinweis-Eigenschaft auf ein Menüelement festlegen. In den Windows-Startmenüelementen werden jedoch Hinweise angezeigt. Das Favoritenmenü in Internet Explorer zeigt auch Hinweise zu Menüelementen an.

Es ist möglich, das OnHint-Ereignis der globalen Anwendungsvariablen in zu verwenden Delphi Anwendungen zum Anzeigen von Menüelementhinweisen in einer Statusleiste.

Windows macht die Nachrichten, die zur Unterstützung eines herkömmlichen OnMouseEnter-Ereignisses erforderlich sind, nicht verfügbar. Die Nachricht WM_MENUSELECT wird jedoch gesendet, wenn der Benutzer einen Menüpunkt auswählt.

instagram viewer

Die WM_MENUSELECT-Implementierung von TCustomForm (Vorfahr des TForm) setzt den Menüelementhinweis auf "Anwendung". Hinweis ", damit es in der Anwendung verwendet werden kann. OnHint-Ereignis.

Wenn Sie Ihren Delphi-Anwendungsmenüs Popup-Hinweise (QuickInfos) zu Menüelementen hinzufügen möchten, konzentrieren Sie sich auf die Nachricht WM_MenuSelect.

Popup-Hinweise

Da können Sie sich nicht auf die Anwendung verlassen. ActivateHint-Methode zum Anzeigen des Hinweisfensters für Menüelemente (da die Menübehandlung vollständig von ausgeführt wird Windows), um das Hinweisfenster anzuzeigen, müssen Sie eine eigene Version des Hinweisfensters erstellen, indem Sie eine neue Klasse aus dem "THintWindow" ableiten.

So erstellen Sie eine TMenuItemHint-Klasse. Dies ist eine Hinweiswitwe, für die tatsächlich angezeigt wird Menüpunkte!

Zunächst müssen Sie die Windows-Nachricht WM_MENUSELECT verarbeiten:

Art
TForm1 = Klasse(TForm)
...
Privat
Verfahren WMMenuSelect (var Nachricht: TWMMenuSelect); Botschaft WM_MENUSELECT;
Ende...
Implementierung
...
Verfahren
TForm1.WMMenuSelect (var Nachricht: TWMMenuSelect);
var
menuItem: TMenuItem; hSubMenu: HMENU;
Start

vererbt; // von TCustomForm (damit diese Anwendung. Hinweis ist zugeordnet)
menuItem: = Null;
wenn (Nachricht. MenuFlag <> $ FFFF) oder (Nachricht. IDItem <> 0) dann
Start
wenn Nachricht. MenuFlag und MF_POPUP = MF_POPUP dann
Start
hSubMenu: = GetSubMenu (Msg. Menü, Msg. IDItem);
menuItem: = Selbst. Speisekarte. FindItem (hSubMenu, fkHandle);
Ende
sonst
Start
menuItem: = Selbst. Speisekarte. FindItem (Msg. IDItem, fkCommand);
Ende;
Ende; miHint. DoActivateHint (menuItem);
Ende
; (* WMMenuSelect *)

Kurzinfo: Die Nachricht WM_MENUSELECT wird an das Eigentümerfenster eines Menüs gesendet, wenn der Benutzer einen Menüpunkt auswählt (aber nicht darauf klickt). Mit der FindItem-Methode der TMenu-Klasse können Sie den aktuell ausgewählten Menüpunkt abrufen. Die Parameter der FindItem-Funktion beziehen sich auf die Eigenschaften der empfangenen Nachricht. Sobald wir wissen, über welchem ​​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 in den Formularen erstellt OnCreate Event-Handler.

Jetzt bleibt nur 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 Erstellen (AOwner: TComponent); überschreiben;
Verfahren DoActivateHint (menuItem: TMenuItem);
Zerstörer Zerstören; überschreiben;
Ende
;

Grundsätzlich ruft die DoActivateHint-Funktion die ActivateHint-Methode des THintWindow unter Verwendung der Hint-Eigenschaft des TMenuItem auf (sofern sie zugewiesen ist). Der showTimer wird verwendet, um sicherzustellen, dass die HintPause der Anwendung verstrichen ist, bevor der Hinweis angezeigt wird. Der hideTimer verwendet Application. HintHidePause, um das Hinweisfenster nach einem bestimmten Intervall auszublenden.

Verwenden von Hinweisen zu Menüelementen

Während einige sagen könnten, dass es kein gutes Design ist, Hinweise für Menüelemente anzuzeigen, gibt es Situationen, in denen das tatsächliche Anzeigen von Hinweisen für Menüelemente viel besser ist als die Verwendung einer Statusleiste. Eine zuletzt verwendete Menüelementliste (MRU) ist ein solcher Fall. Ein benutzerdefiniertes Taskleistenmenü ist ein anderes.

instagram story viewer