Справочник по компонентам Delphi. Часть 1 - Компонент TMenu
ОГЛАВЛЕНИЕ
Страница 37 из 40
Компонент TMenu
TObject—>TPersistent->TComponent->TMenu
Модуль MENUS В Палитру компонентов не входит. Этот компонент отсутствует в Палитре компонентов, но содержит методы и свойства, приведенные в таблице, общие для двух потомков — TMainMenu и TPopupMenu, которые туда входят.
(Ro) property Handle: HMENU; | Содержит дескриптор меню. |
property WindowHandle: HWND; | Содержит дескриптор окна Windows (формы или оконного элемента управления), с которым связано меню. |
(Ro) property Items: TMenuItem; | Содержит список элементов меню. На самом верху иерархии меню есть единственный элемент (со статусом MFPOPUP), чей список и используется. |
function DispatchCoinn>and(ACommand: Word): Boolean; | Отыскивает пункт меню с заданной командой, в случае успеха вызывает его метод Click и возвращает True. |
function DispatchPopupfAHandle: HMENU): Boolean; | Работает как Di spatchCommand, но отыскивает пункт меню с дескриптором AHandle. |
function Findltem(Value: Word; Kind: TFindItemKind): TMenuItem; TFindItemKind = (fkComrriand, fkHandle, fkShortCut); | Возвращает указатель на объект, соответствующий заданному пункту меню. Параметр Value должен содержать величину, которая интерпретируется в соответствии с одним из трех способов поиска (по команде, дескриптору или комбинации горячих клавиш). |
function GetHelpContext(Value: Word; ByComniand: Boolean) : THelpContext; | Возвращает значение контекста помощи элемента меню. Если параметр ByCommand установлен в True, Value содержит связанную с пунктом команду, в противном случае — дескриптор. Если контекст у пункта отсутствует (равен 0), то отыскивается ближайший родительский ненулевой контекст. Если и он не найден, возвращается 0. |
function IsShortCut(var Message: TWMKey): Boolean; | Определяет, какая комбинация горячих клавиш ShortCut нажата, и отыскивает соответствующий пункт меню. Если пункт с таким значением ShortCut найден, и его метод Click отработал успешно, метод возвращает True. |
В следующем примере метод обрабатывает сообщение Windows WM_MENUSELECT, которое возникает при перемещении фокуса между пунктами меню. В зависимости от типа пункта показывается его дескриптор или команда:
procedure TFormI.wmMenuSelect(var Msg :TWMMenuSelect);
var
Anitem : TMenuItem;
begin
with Msg do
begin
if (MenuFlag and MF_POPUP <>0 ) then
begin
Anitem := Formi.Menu.Findltem(Idltem, fkHandle);
if Anitemonil then
Labell.Caption := 'Handle:'+IntToHex(Anitem.Handle,4);
end
else begin
Anitem := Formi.Menu.Findltem(Idltem, fkCommand);
if Anitemonil then Labell.Caption := 'Command:'+IntToHex(Anitem.Command,4);
end;
end;
inherited;
end;