Работа с диалогами из LISP-программ

Атрибуты заголовка диалога

Заголовок диалога имеет следующую структуру:

метка: 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 и выхода из окна через кнопку «Отмена» с потерей всех введенных данных.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: