Страница 37 из 39 Компонент 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; |