Справочник по компонентам Delphi. Часть 1 - Компонент TMenu

ОГЛАВЛЕНИЕ

 

Компонент 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;