Həyat

Delphi tətbiqetmələrində Menyu maddələrinin göstərişlərini necə göstərin

Delphi tətbiqetmələrində Menyu maddələrinin göstərişlərini necə göstərin

Siçan bir menyu komponenti üzərində gəzdikdə bir işarə və ya alət göstərişini göstərmək üçün Delphi tətbiqlərini proqramlaşdırmaq üçün xüsusi kodlaşdırma dilindən istifadə edin. "ShowHint" xassəsi "həqiqi" olaraq təyin olunarsa və "işarə" xüsusiyyətinə mətn əlavə edərsəniz, bu mesaj siçan komponentin (məsələn, TButton) üstünə qoyulanda göstərilir.

Menyu maddələri üçün göstərişləri aktiv edin

Windowsun necə tərtib olunduğuna görə, ipucu xüsusiyyətinin dəyərini bir menyu elementinə təyin etsəniz də, açılmış ipucu görünməyəcəkdir. Bununla birlikdə, Windows başlanğıc menyusu maddələrində göstəriş göstərişləri yoxdur. Internet Explorer-dəki favorit menyusu da menyu maddələrinin göstərişlərini göstərir.

Delphi tətbiqetmələrində qlobal tətbiq dəyişəninin OnHint hadisəsindən bir status çubuğunda menyu elementi göstərişlərini göstərmək mümkündür.

Windows ənənəvi OnMouseEnter hadisəsini dəstəkləmək üçün lazım olan mesajları ifşa etmir. Ancaq istifadəçi bir menyu seçdikdə WM_MENUSELECT mesajı göndərilir.

TCustomForm'un WM_MENUSELECT tətbiqi (TForm'un əcdadı) menyu maddəsi işarəsini "Application.Hint" olaraq təyin edir, ona görə də tətbiqdə istifadə edilə bilər.

Delphi tətbiqi menyularınıza menyu elementi açılan göstərişlər (alət göstərişləri) əlavə etmək istəyirsinizsə, WM_MenuSelect mesajına diqqət yetirin.

Popup göstərişləri

Menyu maddələri üçün işarə pəncərəsini göstərmək üçün Application.ActivateHint metoduna etibar edə bilmədiyinizə görə (menyu ilə işləmə tamamilə Windows tərəfindən həyata keçirilir), işarə pəncərəsini görüntüləmək üçün yeni bir sinif əldə edərək işarə pəncərəsinin öz versiyasını yaratmalısınız "THintWindow" dan.

Bir TMenuItemHint sinifini necə yaratmaq olar. Bu, həqiqətən menyuda görüntülənən bir ipucu duldur!

Əvvəlcə WM_MENUSELECT Windows mesajını idarə etməlisiniz:

növü
TForm1 = sinif(TForm)

özəl
proseduru WMMenuSelect (var Ms: TWMMenuSelect); mesaj WM_MENUSELECT;
son
həyata keçirilməsi

proseduru
TForm1.WMMenuSelect (var Ms: TWMMenuSelect);
var
menyuItem: TMenuItem; hSubMenu: HMENU;
başlamaq

irsi; // TCustomForm-dan (Tətbiq.Hint təyin olunduğundan)
menyuItem: = nil;
əgər (Ms.MenuFlag $ FFFF) və ya (Mes.IDItem 0) sonra
başlamaq
əgər Ms.MenuFlag MF_POPUP = MF_POPUP sonra
başlamaq
hSubMenu: = GetSubMenu (Ms.Menu, Msg.IDItem);
menyuItem: = Self.Menu.FindItem (hSubMenu, fkHandle);
son
başqa
başlamaq
menyuItem: = Self.Menu.FindItem (Ms.IDItem, fkCommand);
son;
son; miHint.DoActivateHint (menyuItem);
son
; (* WMMenuSelect *)

Tez məlumat: WM_MENUSELECT mesajı istifadəçi bir menyu maddəsini seçdikdə (lakin tıklamır) bir menyu sahibinin pəncərəsinə göndərilir. TMenu sinifinin FindItem metodundan istifadə edərək hazırda seçilmiş menyu maddəsini əldə edə bilərsiniz. FindItem funksiyasının parametrləri alınan mesajın xüsusiyyətlərinə aiddir. Siçanın hansı menyu maddəsinin bitdiyini bildikdən sonra TMenuItemHint sinifinin DoActivateHint metodunu adlandırırıq. MiHint dəyişənliyi "var miHint: TMenuItemHint" olaraq təyin olunur və Formanın OnCreate hadisə idarəedicisində yaradılmışdır.

İndi qalan şey TMenuItemHint sinifinin tətbiqidir.

Budur interfeys hissəsi:

TMenuItemHint = sinif(ThintWindow)
özəl

aktivMenuItem: TMenuItem;
showTimer: TTimer;
hideTimer: TTimer;
proseduru HideTime (Göndərən: TObject);
proseduru ShowTime (Göndərən: TObject);
ictimai

konstruktor Yarat (AOwner: TComponent); ləğv etmək;
proseduru DoActivateHint (menyuItem: TMenuItem);
dağıdıcı Məhv etmək; ləğv etmək;
son
;

Əsasən, DoActivateHint funksiyası, TMenuItem'in Hint xüsusiyyətini (təyin olunarsa) istifadə edərək THintWindow'un ActivateHint metodunu çağırır. ShowTimer, göstərişin göstərilməsindən əvvəl Tətbiqin HintPause keçməsini təmin etmək üçün istifadə olunur. HideTimer, müəyyən bir aralıqdan sonra ipucu pəncərəni gizlətmək üçün Application.HintHidePause istifadə edir.

Menyu maddələri göstərişlərindən istifadə edin

Bəziləri menyu maddələri üçün göstərişlər göstərməyin yaxşı bir dizayn olmadığını söyləsə də, həqiqətən menyu elementləri göstərişlərinin vəziyyət çubuğunu istifadə etməkdən daha yaxşı olduğu hallar var. Ən son istifadə olunan (MRU) menyu elementləri siyahısı belə hallardan biridir. Xüsusi tapşırıq çubuğu menyusu başqadır.