Leben

Anzeigen von Menüelementhinweisen in Delphi-Anwendungen

Anzeigen von Menüelementhinweisen in Delphi-Anwendungen



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

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" festgelegt 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).

Aktivieren Sie Hinweise für Menüelemente

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 nicht die Meldungen verfügbar, die zur Unterstützung eines herkömmlichen OnMouseEnter-Ereignisses erforderlich sind. Die WM_MENUSELECT-Nachricht wird jedoch gesendet, wenn der Benutzer ein Menüelement auswählt.

Die WM_MENUSELECT-Implementierung von TCustomForm (Vorgänger 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.

Popup-Hinweise

Da Sie sich nicht auf die Application.ActivateHint-Methode verlassen können, um das Hinweisfenster für Menüelemente anzuzeigen (da die Menüverarbeitung vollständig von Windows ausgeführt wird), 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 eine Hinweis-Witwe, die tatsächlich für Menüelemente angezeigt wird!

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

Art
TForm1 = Klasse(TForm)

Privatgelände
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;
ob (Msg.MenuFlag $ FFFF) oder (Msg.IDItem 0) dann
Start
ob 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 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 im OnCreate-Ereignishandler des Formulars erstellt.

Jetzt bleibt noch die Implementierung der TMenuItemHint-Klasse.

Hier ist der Schnittstellenteil:

TMenuItemHint = Klasse(THintWindow)
Privatgelände

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.

Verwenden von Menüelementhinweisen

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.