Формирование и использование меню. Краткая теория, страница 3

cm_FileOpen = 102;

cm_FileSave = 103;

cm_FileSaveAs = 104;

.....

Type

PMyWindow=^TMyWindow; TMyWlndow=object(TWIndow) Constructor lnit(AParent: PWindowsObject; ATitle: PChar);

Procedure FileOpen(var Msg: TMessage);

Virtual cm_first + cm_FileOpen;

Procedure FileSave(var Msg: TMessage);

Virtual cm_first + cm_FileSave;

Procedure FileSaveAs(var Msg: TMessage);

Virtual cm_first+cm_FileSaveAs;

Destructor Done; Virtual; End;

Procedure TMyWindow.FileOpen; VarOp :POpFile;

Begin

Op := New(POpFile, lnit(@Self, Fn,Tfn, Dfn));

.....

Работа с меню в прикладной программе

В Windows существует рад функций, которые позволяют прикладной программе работать с меню. Эти функции предназначены для:

•  Разрешения/отмены рада команд меню;

•  Установки/снятия специальных отметок для команд меню;

•  Добавления/изменения и удаления команд меню;

•  Использования побитовых изображений в качестве команд ме ню;

•  Замещения элементов меню;

•  Создания и инициализации меню.

При создании окна ему передается копия меню класса, с которой данное окно может работать, не изменяя меню других окон данного. класса.

Для того чтобы можно было осуществлять различные операции с меню, необходимо получить ссылку на меню. Обычно ссылка на меню получается при загрузке меню из ресурса. Следует отметить, что для сложных многоуровневых меню свою ссылку имеет каждое из используемых подменю, и для осуществления операций с подменю необходимо указывать эту ссылку. Для получения ссылки на подменю используется функция GetSubMenu.

Function GetSubMenu(Menu: HMenu; Pos: Integer): HMenu;

В качестве Menu указывается ссылка на меню, включающее подменю, a Pos указывает позицию необходимого подменю. Подменю, прикрепленное к первому элементу меню, имеет нулевую позицию. Возвращаемое значение содержит ссылку на подменю или нулевое значение, если такого подменю не существует.

Для получения количества элементов в меню служит функция GetMenuItemCount. Эта функция по ссылке на меню возвращает количество элементов в этом меню.

В дальнейшем во всех функциях работы с меню первым параметром указывается ссылка на меню.

ObjectWindows

Для получения ссылки на меню можно воспользоваться полем Menuструктуры Attr оконного объекта. Получение ссылки на подменю и выполнение дальнейших операций с меню особенностей не имеет.

Рис. 3.       Доступ к элементам меню

Разрешение и отмена ряда команд меню

Обычно использование команды меню разрешено, она отображается на экране, и ее выбор приводит к посылке соответствующего сообщения. Отмененная команда меню отображается на экране обычным образом, но ее выбор не приводит ни к каким действиям. Существуют также команды, отображаемые специальным цветовым выделением, которые также не реагируют на их выбор манипулятором "мышь" или с помощью клавиатуры. Такие команды будем называть неактивными. Чаще всего таким образом отмечаются те команды, которые не могут быть выполнены, например, закрытие файла, если он еще не был открыт.

Начальное состояние команд меню

При создании меню можно указать начальное состояние команды меню: обычная, отмененная или неактивная. Такие установки действуют только при инициализации меню, затем они могут быть изменены функцией EnableMenuItem. С помощью этой функции можно установить различные состояния команд меню.

Для отмены команды меню используется следующий вызов функции:

EnableMenultem(MyMenu,idm_XXX,mf_Disabled); Для отмены активности команды: EnableMenultem(MyMenu,idm_XXX,mf_Grayed);

Для восстановления команды меню используется следующий вызов функции:

EnableMenultem(MyMenu,idm_XXX,mf_Enabled);

Ниже приводится описание флагов, используемых для указания атрибутов меню.

mf_BitMap: Команда меню представлена растровым графическим изображением;