حياة

كيفية عرض تلميحات عنصر القائمة في تطبيقات دلفي

كيفية عرض تلميحات عنصر القائمة في تطبيقات دلفي

استخدم لغة ترميز محددة لبرمجة تطبيقات Delphi لعرض تلميح أو تلميح أداة ، عندما يحوم الماوس فوق مكون قائمة. إذا تم تعيين الخاصية "ShowHint" على "صواب" وقمت بإضافة نص إلى خاصية "تلميح" ، سيتم عرض هذه الرسالة عندما يتم وضع الماوس فوق المكون (أحد أزرار TButton ، على سبيل المثال).

تمكين تلميحات لعناصر القائمة

نظرًا لطريقة تصميم Windows ، حتى إذا قمت بتعيين قيمة خاصية التلميح إلى عنصر قائمة ، فلن يتم عرض تلميح النوافذ المنبثقة. ومع ذلك ، تعرض عناصر قائمة بدء Windows تلميحات. تعرض قائمة المفضلة في Internet Explorer تلميحات عنصر القائمة.

من الممكن استخدام حدث OnHint لمتغير التطبيق العام في تطبيقات دلفي لعرض تلميحات عنصر القائمة في شريط الحالة.

لا يعرض Windows الرسائل اللازمة لدعم حدث OnMouseEnter تقليدي. ومع ذلك ، يتم إرسال رسالة WM_MENUSELECT عندما يحدد المستخدم عنصر قائمة.

يعيّن تطبيق WM_MENUSELECT TCustomForm (سلف TForm) تلميح عنصر القائمة إلى "Application.Hint" بحيث يمكن استخدامه في الحدث Application.OnHint.

إذا كنت تريد إضافة تلميحات منبثقة لعنصر القائمة (تلميحات الأدوات) إلى قوائم تطبيق Delphi ، فركز على رسالة WM_MenuSelect.

تلميحات منبثقة

نظرًا لأنه لا يمكنك الاعتماد على طريقة Application.ActivateHint لعرض نافذة التلميح لعناصر القائمة (حيث يتم معالجة القائمة تمامًا بواسطة Windows) ، للحصول على نافذة التلميح المعروضة ، يجب عليك إنشاء الإصدار الخاص بك من نافذة التلميح من خلال اشتقاق فصل جديد من "THintWindow".

إليك كيفية إنشاء فئة TMenuItemHint. هذا أرملة تلميح يتم عرضه بالفعل لعناصر القائمة!

أولاً ، تحتاج إلى معالجة رسالة Windows WM_MENUSELECT:

نوع
TForm1 = صف دراسي(TForm)

نشر
إجراء WMMenuSelect (فار Msg: TWMMenuSelect) ؛ رسالة WM_MENUSELECT.
النهاية
التنفيذ

إجراء
TForm1.WMMenuSelect (فار Msg: TWMMenuSelect) ؛
فار
menuItem: TMenuItem؛ hSubMenu: HMENU؛
ابدأ

وارث; // من TCustomForm (بحيث يتم تعيين Application.Hint)
menuItem: = صفر;
إذا (Msg.MenuFlag $ FFFF) أو (Msg.IDItem 0) ثم
ابدأ
إذا Msg.MenuFlag و MF_POPUP = MF_POPUP ثم
ابدأ
hSubMenu: = GetSubMenu (Msg.Menu، Msg.IDItem)؛
menuItem: = Self.Menu.FindItem (hSubMenu، fkHandle)؛
النهاية
آخر
ابدأ
menuItem: = Self.Menu.FindItem (Msg.IDItem، fkCommand)؛
النهاية;
النهاية. miHint.DoActivateHint (menuItem) ؛
النهاية
; (* WMMenuSelect *)

معلومات سريعة: يتم إرسال رسالة WM_MENUSELECT إلى نافذة مالك قائمة عندما يحدد المستخدم (ولكن لا ينقر) عنصر القائمة. باستخدام طريقة FindItem لفئة TMenu ، يمكنك الحصول على عنصر القائمة المحدد حاليًا. تتعلق معلمات الدالة FindItem بخصائص الرسالة المستلمة. بمجرد أن نعرف ما هو عنصر القائمة الذي انتهى الماوس ، ندعو طريقة DoActivateHint لفئة TMenuItemHint. يتم تعريف متغير miHint بأنه "var miHint: TMenuItemHint" ويتم إنشاؤه في معالج أحداث OnCreate للنموذج.

الآن ، ما تبقى هو تطبيق فئة TMenuItemHint.

إليك جزء الواجهة:

TMenuItemHint = صف دراسي(THintWindow)
نشر

activeMenuItem: TMenuItem؛
showTimer: TTimer ؛
hideTimer: TTimer؛
إجراء HideTime (المرسل: TObject) ؛
إجراء شوتايم (المرسل: TObject) ؛
عامة

البناء إنشاء (AOwner: TComponent) ؛ تجاوز;
إجراء DoActivateHint (menuItem: TMenuItem) ؛
المدمر هدم؛ تجاوز;
النهاية
;

في الأساس ، تستدعي الدالة DoActivateHint طريقة ActivateHint الخاصة بـ THintWindow باستخدام خاصية تلميح TMenuItem (إذا تم تعيينها). يتم استخدام showTimer للتأكد من انقضاء HintPause للتطبيق قبل عرض التلميح. يستخدم hideTimer Application.HintHidePause لإخفاء نافذة التلميح بعد فاصل زمني محدد.

باستخدام تلميحات عنصر القائمة

بينما قد يقول البعض أنه ليس من الجيد عرض تلميحات لعناصر القائمة ، إلا أن هناك حالات يكون فيها عرض تلميحات عناصر القائمة أفضل بكثير من استخدام شريط الحالة. قائمة عناصر القائمة الأكثر استخدامًا (MRU) هي إحدى هذه الحالات. قائمة شريط المهام المخصصة آخر.