Диалоговые окна являются важным компонентом любого приложения.
Диалоговые окна используют:
- для отображения полезной информация,
- для удобного ввода исходных данных,
- для изменения настроек программы.
Создать диалоговое окно Автокад, не прибегая к сторонним программам, можно при помощи редактора Visual LISP. Для этого в редакторе Visual LISP используют язык DCL, который предназначен для программирования диалоговых окон.
Давайте для примера создадим диалоговое окно для более удобного ввода исходных данных прямого участка воздуховода.
Добавим в эту форму настройки программы – выбор формы сечения.
И в качестве полезной информации, при вводе исходных данных, покажем пользователю скорость движения воздуха.
В результате хотелось бы получить следующее диалоговое окно. См. Рис. 1.
И так притупим:
Откройте Автокад.
Запустите редактор Visual LISP (наберите в командной строке VLIDE и нажмите <Enter>).
Нажмите на кнопку «Новый файл».
Затем на кнопку «Сохранить».
Откроется диалоговое окно «Сохранение файла». Найдите папку, в которой хотите сохранить файл (в моем случаи D:\MyLisp).
В строке Тип файла: выберите «Исходные DCL-файлы».
Задайте имя файла и нажмите на кнопку «Сохранить». См. Рис. 2.
Директива описания диалога.
Программа, написанная на языке DCL, состоит из логических единиц – директив.
Программный код диалогового окна всегда начинается с директивы описания диалога.
В общем виде она имеет следующий вид:
<Name> : dialog { <атрибуты окна>; <поля> }
<Name> — это имя, по которому диалоговое окно из LISP программы вызывается на экран. Далее следует «:», ключевое слово dialog, и фигурная открывающаяся скобка «{»
Параметр <атрибуты окна> представляет собой последовательность атрибутов и их значений. В общем виде это выглядит следующим образом:
<Атрибут> = <значение>;
После атрибута и его значения ставиться «;»
Параметр <поля> является набором директив описание полей (текстового поля, редактируемого текстового поля, раскрывающегося списка, кнопок)
Директива описания диалога заканчивается закрывающей фигурной скобкой «}».
Давайте дадим имя диалогу:
pr_uch
Добавим атрибут:
label = "Прямой участок" ;
— начальный заголовок диалогового окна;
Добавим директиву описания поля кнопок:
ok_cancel;
— директива которая является ссылкой на группу кнопок (ОК и Отмена), описанную в базовом файле AutoCAD “base.dcl”
В результате получим. См. Рис. 3.
Просмотр диалогового окна.
Чтобы посмотреть, как выглядит диалоговое окно, в главном меню выбираем «Сервис», далее переводим указатель мыши на «Инструменты интерфейса» и щелкаем на «Просмотр DCL из редактора».
См. Рис. 4.
Появится окно «Введите имя диалогового окна» см. Рис. 5.
Нажимаем «ОК» и в рабочем окне AutoCAD появится диалоговое окно.
Что делать если диалоговое окно DCL не отображается?
Директивы описание полей.
Радиоколонка.
Далее добавим директиву описание радиоколонки (колонка переключателей):
:radio_column {label = "Выберите форму сечения"; key = "rc_S"; }
: - директива начинается с двоеточия; radio_column – ключевое слово директивы радиоколонки; Атрибуты: label = "Выберите форму сечения"; - заголовок радиоколонки; key = "rc_S"; - код поля, по которому к полю можно будет обратится из программ LISP.
См. Рис. 6.
Радиокнопки.
Далее добавим два элемента внутрь радиоколонки:
Для круглого сечения:
:radio_button {label = "Круглый"; key = "rb_K"; value = "1"; }
: - директива начинается с двоеточия; radio_button – ключевое слово директивы радиокнопка; Атрибуты: label = "Круглый"; - заголовок радиокнопки; key = "rb_K"; - код поля, по которому к кнопке можно будет обратится из программ LISP; value = "1"; - соответствует включенной радиокнопке ( “0” – выключенной).
Для прямоугольного сечения:
:radio_button {label = "Прямоугольный"; key = "rb_P"; value = "0"; }
: - директива начинается с двоеточия; radio_button – ключевое слово директивы радиокнопка; Атрибуты: label = "Прямоугольный"; - заголовок радиокнопки; key = "rb_Р"; - код поля, по которому к полю можно будет обратится из программ LISP; value = "0"; - соответствует выключенной радиокнопке ( “1” – включенной). См. Рис. 7.
Добавим следующие директивы:
Текстовое поле:
:text {value = "Введите расход и размер сечения"; key = "t1"; }
: - директива начинается с двоеточия; text – ключевое слово директивы текстовое поле; Атрибуты: value = "Введите расход и размер сечения"; - начальное значение текстового поля; key = "t1"; - код поля, по которому к полю можно будет обратится из программ LISP.
Редактируемое текстовое поле:
:edit_box {label = "Расход м3/ч:"; key = "eb_L"; edit_width=15; value = "150"; }
: - директива начинается с двоеточия; edit_box – ключевое слово директивы редактируемое текстовое поле; Атрибуты: label = "Расход м3/ч:"; - заголовок редактируемого текстового поля; key = "eb_L"; - код поля, по которому к полю можно будет обратится из программ LISP. edit_width=15; - ширина редактируемого текстового поля; value = "150"; - начальное значение редактируемого текстового поля;
Раскрывающийся список:
:popup_list{label="Сечение мм:"; key="pop1"; list="100" "\n125"; edit_width=15; }
: - директива начинается с двоеточия; popup_list – ключевое слово директивы раскрывающийся список; Атрибуты: label="Сечение мм:"; - заголовок раскрывающегося списка; key = "pop1"; - код поля, по которому к полю можно будет обратится из программ LISP; list="100" "\n125";- начальный список значение раскрывающегося списка; edit_width=15; - ширина раскрывающегося списка.
И снова редактируемое текстовое поле:
:edit_box {label = "Скорость м3/ч:"; key = "eb_V"; edit_width=15; value = "0"; }
: - директива начинается с двоеточия; edit_box – ключевое слово директивы редактируемое текстовое поле; Атрибуты: label = "Скорость м3/ч:"; - заголовок редактируемого текстового поля; key = "eb_V"; - код поля, по которому к полю можно будет обратится из программ LISP. edit_width=15; - ширина редактируемого текстового поля; value = "0"; - начальное значение редактируемого текстового поля;
См.Рис. 8.
Директива пустой строки.
Что проще было ориентироваться в нашем диалоговом окне, давайте добавим директивы пустой строки:
: spacer{height=1;} – директива вставки пустой строки.
: - директива начинается с двоеточия; spacer – ключевое слово директивы пустая строка; height=1; - атрибут задает высоту пустой строки.
См.Рис. 9.
В результате наше диалоговое окно создано. Осталось научиться запускать и управлять им из LISP программы. Как это делать мы рассмотрим в следующей статье: «Пример LISP программы управления диалоговым окном в Автокад.»
Если у Вас появились вопросы, задавайте их в комментариях.
Если Вы нашли что-то полезное на моем сайте не забудьте порекомендовать статью в социальных сетях.
Пишите в комментариях или мне на почту Ваши пожелания о том, какие статьи Вы хотели бы увидеть на моем сайте.
Хотите получать информацию о выходе новых статей. Оформляйте подписку.
До новых встреч.
«Автор: Михаил Орлов»
Сколько лазил по Инету, искал описание работы с диал. окнами АКАДа, а оно тут расписано до уровня атомов. Очень Вам, Михаил Орлов, признателен. К тому же программировать для DCL-окон, как оказалось, проще простого. Большое спасибо за описание.
Спасибо. Рад, моя статья Вам помогла.
спасибо за урок!
Вроде все понятно. Копировала строки.
Но после окна «Введите имя диалогового окна» ввожу pr_uch и в Автокаде
выдается ошибка Ошибка в файле диалога C:\…. в признаке конца файла: преждевременный конец файла.
Пришлите Ваш DCL-файл на почту: acadprog@gmail.com
Огромное спасибо Вам Михаил за уроки для чайников ,первый раз в жизни начал что-то программировать ,разобрался как добавить асортимент сечений воздуховодов,только почему-то при выборе прямоугольных исчезает все и приходится по новой редактор вызывать ,Автокад 2017 честная лицензия,вроде все без ошибок
Пришлите Ваш DCL-файл на почту: acadprog@gmail.com
Я проверю, его у себя.
Разобрался Михаил ,программа то получается незаконченная ,а я поспешил с выводами,еще раз огромное спасибо,уже учу следующий ваш урок
Михаил, есть ли у вас уроки по ActiveX?
Специального урока по ActiveX нет. Но в нескольких уроках технология ActiveX используется:
Создание блока: https://acad-prog.ru/lisp-sozdanie-bloka/
Поворот 3D-объекта: https://acad-prog.ru/3d-modelirovanie-v-autocad/
Редактирование мультилинии: https://acad-prog.ru/avtomatizatsiya-proektirovaniya-otvod/
спасибо вам
Спасибо большое!