Адаптация меню AutoCAD 2002, страница 2

В AutoCAD используются понятия базового меню и фрагментов меню. Базовым называется меню, которое было загружено последним с помощью команды МЕНЮ. Фрагментом называется меню, которое было загружено с помощью команды МЕНЮЗАГР. Команда МЕНЮЗАГР загружает фрагменты меню, позволяя добавлять и упорядочивать элементы строки меню. Вместе с фрагментом меню в AutoCAD загружаются все связанные с ним элементы интерфейса. Для того чтобы отдельные падающие меню отображались в строке меню, их нужно явно добавить туда с помощью вкладки «Активные меню» диалогового окна «Адаптация меню» или с помощью AutoLISP. В процессе загрузки фрагментов меню работает ранее описанная процедура создания MNC, MNR и MNS файлов. AutoCAD также загружает соответствующие файлы MNL и DLL (файл ресурсов), если такие имеются.

При выходе из AutoCAD запоминаются имя базового меню, имена фрагментов меню (до 24) и имена падающих меню, входящих в строку меню (до 24). Это обеспечивает постоянство интерфейса AutoCAD при его перезагрузке.

Концепция фрагментов меню позволяет пользователям и программистам эффективно манипулировать различными меню. AutoCAD обеспечивает удобный способ управления отдельными пунктами меню. Каждый пункт имеет свой идентификатор, а каждому файлу меню соответствует имя группы меню. Включить или отключить любой пункт меню, а также проверить его статус можно, указав его идентификатор и имя группы меню, которой он принадлежит.

Фрагменты меню позволяют придавать более совершенный вид приложениям на AutoLISP. Установить, загружен ли конкретный файл меню, можно с помощью следующего выражения:

(menucmd "Gимя_группы.идентификатор=?")

Если файл загружен, возвращается непустое значение; если не загружен — значение nil. Более подробно об этом можно узнать в разделе «Обращение к падающим и контекстным меню» .

После того, как приложение установило наличие нужного меню, можно выполнять с ним дальнейшие действия.

Загрузка фрагментов меню

Пользователь загружает фрагменты меню с помощью диалогового окна «Адаптация меню» команды МЕНЮЗАГР. Приложение при загрузке фрагмента меню работает с вариантом МЕНЮЗАГР для командной строки. В следующем примере для вызова команды МЕНЮЗАГР и загрузки фрагмента меню из файла testmenu используется функция command.

(command "_menuload" "testmenu") 

Приложение размещает падающие меню, описанные во вновь загруженных фрагментах меню, с помощью функции menucmd, как показано в следующих примерах.

(menucmd "P6=+sample.pop1")
(menucmd "Gsample.pop1=+sample.pop2")

Первый пример соответствует вставке меню POP1 из группы SAMPLE непосредственно перед падающим меню, находившимся ранее в шестой позиции (считая слева). Во втором примере меню POP2 из группы SAMPLE устанавливается непосредственно перед меню POP1 из группы SAMPLE (в синтаксисе используются глобальные ссылки).

Более подробно о синтаксисе можно узнать в разделе «Обращение к падающим и контекстным меню» .

Выгрузка фрагментов меню

Команда МЕНЮВЫГР выгружает фрагменты меню из базового меню и удаляет соответствующие падающие меню из строки меню. Для того чтобы удалить отдельные падающие меню, не обязательно выгружать группу меню целиком. Синтаксис операции подобен используемому для добавления падающих меню:

(menucmd "Gsample.pop1=-")
(menucmd "Gsample.pop2=-")

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

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

Меню полностью перестраивается (с потерей всех загруженных ранее фрагментов меню) после выполнения команды МЕНЮ , которая загружает новый файл базового меню. При этом также теряются связи, установленные ранее для идентификаторов пунктов меню.

Файл меню состоит из нескольких разделов, описывающих различные области интерфейса AutoCAD. В зависимости от выполняемых функций, каждая область меню описывается одним или несколькими разделами. Внутри разделов меню описываются пункты меню (их внешний вид и выполняемые ими функции). Описание пункта меню включает в себя следующие элементы: идентификатор, имя и макрос меню. Пункты меню, описываемые в различных разделах, аналогичны по структуре и функциональности, но отличаются синтаксической структурой имен.

Не обязательно описывать в одном файле компоненты всех разделов меню. В него необходимо включать только те из них, которые используются данным приложением. Рекомендуется разбить меню на несколько файлов меньшего размера, каждый из которых можно при необходимости загрузить с помощью команды МЕНЮЗАГР. Это не только обеспечивает более эффективное использование ресурсов системы, но и облегчает разработку и использование приложения, так как в этом случае в процесс вовлечены относительно небольшие по размеру фрагменты меню.

Каждый раздел файла меню имеет заголовок в формате ***имя_раздела. Заголовки и соответствующие им разделы перечислены в следующей таблице.

Заголовки разделов меню 

Заголовок раздела

Область меню

***MENUGROUP

Имя группы файла меню

***BUTTONSn

Кнопочные меню устройства указания

***AUXn

Меню системного устройства указания

***POPn

Падающие/контекстные меню

***TOOLBARS

Описания панелей инструментов

***IMAGE

Графическое меню

***SCREEN

Экранное меню

***TABLETn

Планшетное меню

***HELPSTRINGS

Текст, выводимый в строке состояния для выделенных пунктов падающих и контекстных меню, а также кнопок панелей инструментов, на которые указывает курсор.

***ACCELERATORS

Описания клавиш быстрого вызова

В файл меню можно включать пояснения, упоминания об авторских правах и другие комментарии. Строки, начинающиеся с двух косых черт
(//), игнорируются компилятором:

//Это — строка комментария

Все пункты меню, независимо от раздела, имеют одинаковый общий синтаксис. Их описания (за исключением раздела Image, в котором идентификаторы пунктов меню не используются) включают в себя идентификатор, имя и макрос меню. Как правило, описание пункта меню записывается в одну строку и имеет следующий формат: