АвтоЛИСП - реализация языка программированияРефераты >> Программирование и компьютеры >> АвтоЛИСП - реализация языка программирования
Исходные файлы меню имеют расширение .mnu. Компилированные файлы имеют расширение .mnx. LISP-файлы меню имеют расширение .mnl. Эти файлы автоматически загружаются в память при загрузке файла меню с таким же именем и содержат LISP-выражения, которые могут использоваться файлом меню. Файлы определения меню имеют расширение .mnd. Они являются специальными исходными файлами, содержащими макросы. Файлы этого типа компилируются с помощью программы mc, которая размещена в каталоге SAMPLE.
Файл .mnuкомпилируется, и создается файл с расширением .mnx, который имеет компактный внутренний формат, позволяет значительно быстрее осуществлять загрузку меню. При создании нового рисунка файл меню с именем, указанным в рисунке-прототипе, загружается автоматически. АвтоКАД предоставляет возможность заменить это меню на новое. Для компиляции и загрузки меню используется команда menu (меню). При этом АвтоКАД записывает в файл рисунка имя последнего использовавшегося с ним меню; при последующем редактировании этого рисунка меню загружается автоматически. Команда menu загружает файл меню с диска:
Command: MENU
Для задания имени файла на экран выводится стандартное диалоговое окно файлов с заголовком «Выбор файла меню». АвтоКАД ищет файл с расширением .mnu, если он найден, то ищет файл с расширением .mnx, и если MNX-файл имеет те же дату и время создания, что и MNU-файл, он загружается АвтоКАДом. Иначе компилируется MNU-файл и загружается MNX-файл. Если MNU-файл не найден, АвтоКАД ищет MNX-файл. Если MNX-файл найден, АвтоКАД его загружает, иначе высвечивается сообщение об ошибке и запрос на ввод другого файла меню.
Если отключена системная переменнаяFILEDIA, можно воспользоваться командной строкой для загрузки меню:
Command: MENU : (Команда: МЕНЮ)
Menu file name or . for none <current>: : (Имя файла меню или . если оно не нужно <текущее имя>:
Имя файла задается без расширения.
Иногда имеет смысл полностью убрать меню, например, для очистки зоны экранного меню. Для этого необходимо ввести «.» в ответ на запрос команды MENU.
5.2. Структура файла меню
Файл меню можно логически разбить на разделы, каждый из которых относится к некоторому устройству, поддерживающему работу с меню, и содержит командные строки, предназначенные для этого устройства. Разделы идентифицируются с помощью меток разделов:
***SCREEN - экранное меню;
***BUTTONSn - кнопочное меню устройства указания, где n - число от 1 до 4;
***AUXn - дополнительное кнопочное меню, где n - число от 1 до 4;
***POPn - падающие и курсорные меню, где n - число от 1 до 16;
***ICON - графическое меню;
***TABLETn - область меню планшета, где n - число от 1 до 4.
Метки определяют, что соответствующие пункты меню до метки следующего раздела или до конца файла относятся к конкретному работающему с меню устройству. Например:
***SCREEN
[Help]help
[Bye]end
***BUTTONS
erase
oops
Пункты меню «Help» и «Bye» относятся к меню экрана, а пункты «erase» и «oops» - к кнопочному меню. Если в файле нет метки «***SCREEN», то система АвтоКАД действует так, как будто «***SCREEN» является первой меткой в файле.
5.3. Подменю
Пользователю предоставляется возможность определять подменю, которые представляют собой группы из пунктов меню, активизировать их и сделать доступными для выбора пользователя. Например, выбор пункта «ARC» из подменю «DRAW» может активизировать подменю, которое содержит варианты исполнения команды ARC. Пункты дополнительного меню временно заменяют все или часть текущего меню. Обычно по окончании использования подменю происходит возвращение к предыдущему меню. Подменю могут быть вложенными.
Начало подменю задается меткой подменю. Она имеет следующий формат:
** <имя меню> <номер> .
Имя меню представляет собой последовательность из не более чем 31 символа, содержащую буквы, цифры, а также специальные символы «$», «-» (дефис), «_» (подчеркивающая черта). Метка подменю должна находиться в отдельной строке файла меню и не должна содержать пробелов. Каждое имя подменю в пределах файла должно быть уникальным, например:
**MOVE 3
[MOVE:]^C^CMOVE
Window
Last
Previous
Crossing
Remove
Add
Undo
где имя «**MOVE» введено для подменю команды MOVE. Заголовок [MOVE:] указывает, что это команда и ее выбор вызовет выполнение команды MOVE.
Подменю может содержать любое количество пунктов, но с учетом возможностей устройства, с которого задается меню. Например, в меню экрана необходимо учитывать, что на экране одновременно можно отобразить только 20 пунктов.
При активизации подменю его пункты обычно замещают пункты предыдущего меню. Например, для экрана пункты подменю заменяют пункты предыдущего меню, начиная с верхнего блока, при этом они могут заменять только часть предыдущего меню. Номер задает номер начальной строки подменю. Например, **MOVE 3 позволяет сохранять в экранном меню доступ к корневому меню АвтоКАДа и объектной динамической привязке «* * * *», а далее разместить подменю для команды «MOVE:».
Чтобы активизировать или деактивизировать некоторое подменю, в пункте меню используется следующая конструкция:
$<раздел>=<подменю> , где
<раздел> - метка меню. Допустимы следующие сокращения:
S - для меню SCREEN;
P1 - P16 - для меню POP от 1 до 16;
I - для меню ICON;
B1 - B4 - для меню BUTTONS;
T1 - T4 - для меню TABLET1 - TABLET4;
A1 - A4 - для меню AUX1.
<подменю> - указывает метку подменю без символов «**» или имя раздела меню, которое должно активизироваться.
Например, в подменю EDIT для активизации подменю с именем MOVE используется конструкция $S=MOVE:
**EDIT 3
.
[MOVE:]^C^C$S=MOVE
.
Прежде чем активизируется подменю, пункты меню, активизированные в текущий момент времени, в разделе переписываются в стек. Для того, чтобы восстановить пункты предыдущего экрана, в пункте меню должно выдаваться «$S=». Например, чтобы предусмотреть в текущем меню пункт LAST для возврата в предыдущее меню, должен быть создан следующий пункт:
[_LAST_]^C^C$S=
Именно так в меню, поставляемом с системой АвтоКАД, осуществляется возврат в предыдущее меню. Сохраняются до восьми вложенных подменю. Если количество вложенных меню больше восьми, первые меню пропадают.
Активизацию механизма подменю можно осуществлять в ходе выполнения некоторой команды без ее прерывания, т.е. допускаются такие последовательности команд, как «COLOR $=X $S=LACOLOR»: