Обращение к раскрывающимся и контекстным меню
 
 
 

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

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

Относительная адресация команд раскрывающегося и контекстного меню

Чтобы выполнить адресацию элемента раскрывающегося или контекстного меню на основании группы настройки и кода элемента, используйте функцию AutoLISP menucmd. С помощью следующего синтаксиса выполняется адресация элемента меню на основании кода элемента.

(menucmd "Gгруппа_меню.код_элемента=значение") 

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

(menucmd "Gsample.ID_Line=~")

Если известно, что находится в основном файле НПИ, можно создать частичный файл НПИ с дополнительным элементом меню, который выполняет адресацию в основной файл. Таким образом, обеспечивается согласованность работы частичных файлов НПИ и файлов основного меню.

Абсолютное обращение к раскрывающимся и контекстным меню

Включить или отключить отдельные пункты меню можно с помощью синтаксиса $Pn=xxx. Для этого используется формат:

$Pn.i=xxx

С помощью $ можно загрузить раздел меню; Pn задает активный раздел меню (от 0 до 16); i задает номер пункта меню; xxx (если присутствует) задает недоступность или пометку.

С помощью синтаксиса $Pn=xxx в следующем примере помечается пункт 1 раздела POP7.

$P7.1=!.

В следующем примере для выполнения адресации элемента раскрывающегося или контекстного меню используется функция AutoLISP menucmd. Следующий синтаксис нельзя будет применять во всех случаях, так как файлы настройки по своей природе динамичны (в результате загрузки частичных файлов НПИ).

(menucmd "P1.2=~")

Синтаксис основывается на заданном положении элемента меню и не работает в случаях, когда новый элемент меню подставлен перед разделом POP1 командой НПИЗАГР.

Несмотря на иерархичность меню, нумерация элементов меню последовательна.

При адресации элементов меню (независимо от их местоположения в иерархической структуре) можно пользоваться следующими формами:

$P@.@=xxx

Выполняет адресацию текущей или наиболее часто выбираемой команды.

$P@.n=xxx

Таким образом обеспечивается согласованность работы базового меню и фрагментов меню.

Доступ к состоянию пунктов из AutoLISP

Функция AutoLISP menucmd воспринимает строки команд $Pn=xxx, но без начального символа $. Для этих функций элемент xxx может иметь специальные значения.

Pn.i=?

Возвращает состояние недоступности и пометки указанного элемента в виде строки (например, ~ для недоступного пункта, !. для помеченного пункта, "" для пункта, который доступен и не помечен).

Pn.i=#?

Возвращает такую же строку, как и Pn.i=?, но с добавлением префикса Pn.i= префикс. Это очень удобно в сочетании с формами @, поскольку возвращается фактический номер меню и номер элемента.

Например, если пятый элемент в разделе POP6 отключен, следующий код вmenucmd возвращает показанные ниже строковые значения.

(menucmd "P6.5=?") возвращает "~" 
(menucmd "P6.5=#?") возвращает "P6.5=~"