Разработка приложения

Приложение OpenDCL состоит из кода AutoLISP  и данных проекта OpenDCL. Проект OpenDCL создается и редактируется в OpenDCL Studio и может существовать либо как отдельный .odcl файл либо в виде данных в коде AutoLISP. Встраивание проектных данных в код AutoLISP сложная тема, и рассматривается отдельно.

OpenDCL использует такую модель программирования, где события пользовательского интерфейса вызывают свои обработчики, выполняющие работу приложения. Как правило, OpenDCL включает код для загрузки и отображения формы наряду с обработчиками событий, управляющими формой во время ее отображения. Обработчики событий реагируют на действия пользователя, такие как нажатие кнопки или выбор пункта в списке.

В коде AutoLISP перед отображением формы OpenDCL нужно сначала проверить, что исполняемый модуль OpenDCL загружен. Это можно сделать с помощью команды "_opendcl" вAutoCAD. Для этого нет необходимости проверять, загружен ли уже  исполняемый модуль - если нет, то команда ничего не сделает.

(command "_OPENDCL")

Следующим шагом является загрузка данных проекта. Если данные проекта хранятся в файле, они могут быть загружены вызовом функции (dcl-Project-Load). Если же данные проекта были встроены в код AutoLISP, то они могут быть загружены функцией (dcl-Project-Import).

После того как данные проекта загружены, функция (dcl-Form-Show) создает диалог (форму) и показывает его на экране. Когда отображается диалоговое окно, обработчики событий AutoLISP берут на себя управление формой, пока она не будет закрыта. Инициализация диалога должна быть сделана в обработчике событий под названием OnInitialize. Ниже приводится типичный код для отображения простого модального диалога:

(defun C:MyCommand (/ Result)
(command "_OPENDCL") ; загрузка исполняемого модуля OpenDCL (if (dcl-Project-Load "MyProject") ; загрузка данных проекта из MyProject.odcl (progn (setq Result (dcl-Form-Show MyProject/MyForm))
; Обратите внимание, что этот код не выполняется до *после* закрытия диалогового окна! (if (= Result 1) (DoSomething)) ) ) (princ) )
(defun c:MyProject/MyForm#OnInitialize (/)
(dcl-Control-SetCaption MyProject/MyForm/Label1 "Hello World!")
)
(defun c:MyProject/MyForm/CloseButton#OnClicked (/)
(dcl-Form-Close MyProject/MyForm)
)

Как вы можете видеть, код отображения диалогового окна очень прост. Работа по инициализации, управлению и реагированию на события диалога происходит в отдельных обработчиках событий, которые могут вызываться в то время когда диалог активен. Диалоговое окно закрывается, если вызывается обработчик события  (dcl-Form-Close). Обратите внимание, что для (dcl-Form-Close) можно задать дополнительный код состояния , который затем передается на (dcl-Form-Show). Этот код состояния может быть использован для задания действий, которые должны быть выполнены после закрытия диалога.