Диалоговые окна являются важным компонентом любого приложения.
Диалоговые окна используют:
Создать диалоговое окно Автокад, не прибегая к сторонним программам, можно при помощи редактора 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 программы управления диалоговым окном в Автокад.»
Если у Вас появились вопросы, задавайте их в комментариях.
Если Вы нашли что-то полезное на моем сайте не забудьте порекомендовать статью в социальных сетях.
Пишите в комментариях или мне на почту Ваши пожелания о том, какие статьи Вы хотели бы увидеть на моем сайте.
Хотите получать информацию о выходе новых статей. Оформляйте подписку.
До новых встреч.
«Автор: Михаил Орлов»
Программа "Расчет профиля" создана в помощь инженерам-проектировщикам, работающих с профилями. Автор программы, читатель моего сайта:…
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с…
Как нарисовать дугу в Автокаде? Для этого в программе Автокад существует несколько способов. В этом…
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с…
В этой статье мы продолжим процесс автоматизации проектирования систем вентиляции. (далее…)
Одним из эффективных способов автоматизации процесса проектирования в Автокад, может послужить создание своих программ на…
View Comments
Сколько лазил по Инету, искал описание работы с диал. окнами АКАДа, а оно тут расписано до уровня атомов. Очень Вам, Михаил Орлов, признателен. К тому же программировать для 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/
спасибо вам
Спасибо большое!