Атрибуты заголовка диалога
Заголовок диалога имеет следующую структуру:
метка: dialog { атрибуты элементы }.
Параметр атрибуты представляет собой последовательность атрибутов и их значений. Атрибуты – это различные характеристики окна в целом или его элементов. В нашем примере был использован только один атрибут – label.
Параметр элементы является набором директив описания кнопок, списков, надписей и т.д. В нашем примере элементами являлись директивы от edit_box до ok_cancel.
Рассмотрим атрибуты окна в целом.
label или value – заголовок диалогового окна. Система AutoCAD по своим правилам определяет размеры диалогового окна. Строка, заданная в атрибуте label, участвует в определении размеров диалогового окна. Если вместо атрибута label использовать атрибут value, то заданная строка не будет влиять на размер окна.
width – минимальная ширина окна.
height – минимальная высота окна.
Ширина и высота окна задаются в условных единицах, зависящих от действующего шрифта. Система AutoCAD не сформирует окно меньше, чем указано в атрибутах width и height.
Программа на языке AutoLISP должна обязательно содержать следующие выражения.
1. Загрузка DCL -файла, содержащего нужный диалог, например:
(setq b (load_dialog “balka.dcl”).
В переменной b сохранится целое отрицательное число, если загрузка по каким-то причинам не выполнилась (например, не найден файл), и положительное – при успешной загрузке.
2. Вывод на экран диалогового окна, например:
(new_dialog “Balka” b “” ‘(100 200))
Функция new_dialog имеет четыре аргумента:
“Balka” – метка диалога.
b – переменная, использованная с функцией load_dialog.
“” – пустая строка. Она говорит о том, что никаких действий выполнять не нужно, когда пользователь при работе с окном выбрал элемент, для которого действие не задано. Если нужно выполнить какое-либо LISP -выражение, оно должно быть задано в виде строки в качестве третьего аргумента.
‘(100 200) – координаты левого верхнего угла диалогового окна. Если задать ‘(-1 -1), то окно расположится в центре экрана.
3. Описание действий, которые необходимо выполнить при редактировании поля данных, с помощью функции action_tile.
Функция action_tile при помощи LISP -выражений задает действия, которые нужно выполнить при выборе элемента или редактировании поля данных.
(action_tile код выражение).
Действия, указанные в выражении, выполняются, когда после операции с элементом (редактирования, выбора элемента списка и т.д.) курсор перейдет к другому элементу или пользователь выйдет из окна.
Обращение к функции action_tile должно быть записано между вызовами функций new_dialog и start_dialog.
4. Активизация диалогового окна:
(start_dialog)
После окончания работы с окном оно должно быть закрыто:
(done_dialog).
Вызов этой функции не обязателен, если в описании диалогового окна присутствует оператор ok_cancel или какой-нибудь другой с кнопкой выхода.
5. Выгрузка из памяти DCL -файла, например:
(unload_dialog b).
Память будет освобождена от файла, связанного с переменн о й b, которая была указана при загрузке файла.
Продолжим пример с балкой и запрограммируем функцию ввода данных.
(defun DataInput ()
(setq L 6 a 0 b 0 fy 1 fn 0)
(setq fd (load_dialog "c:/ … /balka.dcl"))
(new_dialog "Balka" fd)
(action_tile “L” “(setq L (atof $value))”)
…
(action_tile “cancel” “(setq L 6 a 0 b 0 fy 1 fn 0)”)
; При нажатии на кнопку CANCEL – восстановление начальных значений.
(start_dialog)
(unload_dialog fd)
(if (= fn 1) (setq fy 0)); Если щелкнуть на fn, то в fy не должна остаться 1.
)
Рассмотрим текст функции DataInput и сделаем несколько замечаний.
1. Перед загрузкой DCL -файла происходит присвоение начальных значений переменным в соответствии с установками value=… в DCL -файле. Эти значения останутся в переменных, если поле данных не будет редактироваться.
2. Если при загрузке файла его имя задано без полного пути, то путь должен быть указан «вручную» через меню AutoCAD а:
Инструменты ® Опции ® Файлы ® Путь доступа к файлам поддержки
3. Примеры использования функции action_tile даны только для ввода пролета L и выхода из окна через кнопку «Отмена» с потерей всех введенных данных.