Диалоговые окна являются важным компонентом любого приложения.

Диалоговые окна используют:

  • для отображения полезной информация,
  • для удобного ввода исходных данных,
  • для изменения настроек программы.

Создать диалоговое окно  Автокад, не прибегая к сторонним программам,  можно при помощи редактора Visual LISP. Для этого в редакторе Visual LISP используют язык DCL, который предназначен для программирования диалоговых окон.

Давайте для примера создадим диалоговое окно для более удобного ввода исходных данных прямого участка воздуховода.

Добавим в эту форму настройки программы – выбор формы сечения.

И в качестве полезной информации, при вводе исходных данных, покажем пользователю скорость движения воздуха.

В результате хотелось бы получить следующее диалоговое окно. См. Рис. 1.

Рис. 1. Диалоговое окно.

И так притупим:

Откройте Автокад.

Запустите редактор Visual LISP (наберите в командной строке VLIDE и нажмите <Enter>).

Нажмите на кнопку «Новый файл».

Затем на кнопку «Сохранить».

Откроется диалоговое окно «Сохранение файла». Найдите папку, в которой хотите сохранить файл (в моем случаи D:\MyLisp).

В строке Тип файла: выберите «Исходные DCL-файлы».

Задайте имя файла и нажмите на кнопку «Сохранить». См. Рис. 2.

Рис. 2. Создание DCL файла.

Директива описания диалога.

Программа, написанная на языке DCL, состоит из логических единиц – директив.

Программный код диалогового окна всегда начинается с директивы описания диалога.

В общем виде она имеет следующий вид:

<Name> : dialog { <атрибуты окна>;
    <поля>
}
<Name> —  это имя, по которому диалоговое окно из LISP программы 
вызывается на экран.
Далее следует «:», ключевое слово dialog, и фигурная открывающаяся скобка «{»

Параметр <атрибуты окна> представляет собой последовательность атрибутов и их значений. В общем виде это выглядит следующим образом:

<Атрибут> = <значение>;

После атрибута и его значения ставиться «;»

Параметр <поля> является набором директив описание полей (текстового поля, редактируемого текстового поля, раскрывающегося списка, кнопок)

Директива описания диалога заканчивается закрывающей фигурной скобкой «}».

Давайте дадим имя диалогу:

pr_uch

Добавим атрибут:

label = "Прямой участок" ;

— начальный заголовок диалогового окна;

Добавим директиву описания поля кнопок:

ok_cancel;

— директива  которая является ссылкой на группу кнопок (ОК и Отмена), описанную в базовом файле AutoCAD “base.dcl

В результате получим. См. Рис. 3.

Рис. 3. Директива описания диалога.

Просмотр диалогового окна.

Чтобы посмотреть, как выглядит диалоговое окно, в главном меню выбираем  «Сервис», далее переводим указатель мыши на «Инструменты интерфейса» и щелкаем на «Просмотр DCL из редактора».

См. Рис. 4.

Рис. 4. Просмотр DCL из редактора.

Появится окно «Введите имя диалогового окна» см. Рис. 5.

Рис. 5.  Введите имя диалогового окна.

Нажимаем «ОК» и в рабочем окне AutoCAD появится диалоговое окно.

Что делать если диалоговое окно DCL не отображается?

Директивы описание полей.

Радиоколонка.

Далее добавим директиву описание радиоколонки (колонка переключателей):

:radio_column {label = "Выберите форму сечения"; key = "rc_S";
              }
: - директива начинается с двоеточия;
radio_column – ключевое слово директивы радиоколонки;
Атрибуты:
label = "Выберите форму сечения"; - заголовок радиоколонки;
key = "rc_S"; - код поля, по которому к полю можно будет обратится
из программ LISP.

См. Рис. 6.

Рис. 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.

Рис. 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.

Рис. 8 . Директивы описание полей.

Директива пустой строки.

Что проще было ориентироваться в нашем диалоговом окне, давайте добавим директивы пустой строки:

: spacer{height=1;} – директива вставки пустой строки.
: - директива начинается с двоеточия;
spacer – ключевое слово директивы пустая строка;
height=1; - атрибут задает высоту пустой строки.

См.Рис. 9.

Рис. 9. Окончательный вариант программы.

В результате наше диалоговое окно создано. Осталось научиться запускать и управлять им из LISP программы. Как это делать мы рассмотрим в следующей статье: «Пример LISP программы управления диалоговым окном в Автокад.»

Если у Вас появились вопросы, задавайте их в комментариях.

Если Вы нашли что-то полезное на моем сайте не забудьте порекомендовать статью в социальных сетях.

Пишите в комментариях или мне на почту Ваши пожелания о том, какие статьи Вы хотели бы увидеть на моем сайте.

Хотите получать информацию о выходе новых статей. Оформляйте подписку.

До новых встреч.

«Автор: Михаил Орлов»

Также на эту тему Вы можете почитать:

Михаил Орлов

View Comments

  • Сколько лазил по Инету, искал описание работы с диал. окнами АКАДа, а оно тут расписано до уровня атомов. Очень Вам, Михаил Орлов, признателен. К тому же программировать для DCL-окон, как оказалось, проще простого. Большое спасибо за описание.

    • Спасибо. Рад, моя статья Вам помогла.

  • спасибо за урок!
    Вроде все понятно. Копировала строки.
    Но после окна «Введите имя диалогового окна» ввожу pr_uch и в Автокаде
    выдается ошибка Ошибка в файле диалога C:\.... в признаке конца файла: преждевременный конец файла.

  • Огромное спасибо Вам Михаил за уроки для чайников ,первый раз в жизни начал что-то программировать ,разобрался как добавить асортимент сечений воздуховодов,только почему-то при выборе прямоугольных исчезает все и приходится по новой редактор вызывать ,Автокад 2017 честная лицензия,вроде все без ошибок

      • Разобрался Михаил ,программа то получается незаконченная ,а я поспешил с выводами,еще раз огромное спасибо,уже учу следующий ваш урок

  • Михаил, есть ли у вас уроки по ActiveX?

Recent Posts

Программа расчета профиля

Программа "Расчет профиля" создана в помощь инженерам-проектировщикам, работающих с профилями. Автор программы, читатель моего сайта:…

8 лет ago

Как нарисовать прямоугольник в Автокаде.

Любой чертеж может быть разбит на простейшие элементы, примитивы.  В этом уроке мы познакомимся с…

9 лет ago

Как нарисовать дугу в Автокаде.

Как нарисовать дугу в Автокаде? Для этого в программе Автокад существует несколько способов. В этом…

9 лет ago

Как нарисовать круг в Автокаде.

Любой чертеж может быть разбит на простейшие элементы, примитивы.  В этом уроке мы познакомимся с…

9 лет ago

Автоматизация проектирования. Отвод.

В этой статье мы продолжим процесс автоматизации проектирования систем вентиляции. (далее…)

9 лет ago

Автоматизация проектирования.

Одним из эффективных способов автоматизации процесса проектирования в Автокад,  может послужить создание своих программ на…

9 лет ago