Page 66 - AutoLISP и Visual LISP в среде AutoCAD
P. 66

3.6. СТРУКТУРА ПРОГРАММЫ УПРАВЛЕНИЯ ДИАЛОГОВЫМИ
                                                           ОКНАМИ


                         Описание диалога на языке DCL является статическим представлением
                  диалогового  окна.  Все  действия  в  момент  его  активации  и  после  закрытия
                  определяются управляющей программой на AutoLisp. Для этого имеется ряд
                  функций, перечисленных выше.
                         Рассмотрим структуру программы, управляющей диалоговыми окнами.
                  Такая программа должна иметь следующие блоки:
                         · инициализации;

                         · обработки событий (действий);
                         · деинициализации.
                         Блок  инициализации  должен  включать  функции  загрузки  DCL-файла
                  (load_dialog), отображения диалогового окна на экране (new_dialog), задания
                  (если  необходимо)  выражений,  обрабатывающих  действия  при  выборе  или
                  изменении состояния элементов управления (action_tile). На этом этапе часто
                  вызываются  функции  для  установки  состояния  элементов  управления
                  (set_tile, mode_tile), функции для работы со списками и изображениями.
                         Процесс  ввода  данных  пользователем,  выбора  определенных
                  элементов,  нажатия  на  кнопки  принято  обозначать  событиями  или
                  действиями. Блок обработки событий представляет собой бесконечный цикл,
                  в  котором  выполняются  выражения AutoLisp,  приписанные  элементам
                  управления  с  помощью  атрибута action или  функции action_tile.  Передача
                  управления  циклу  обработки  событий  осуществляется  вызовом  функции
                  start_dialog. Цикл обработки событий длится до тех пор, пока результатом
                  какого-либо выражения действия не станет вызов функции закрытия диалога
                  (done_dialog).  Для  стандартных  кнопок  подтверждения  и  отмены  закрытие
                  происходит автоматически (можно не вызывать функцию done_dialog).
                         Блок  деиницилизации  начинается  с  вызова  функции done_dialog и
                  может  включать  прерывание  (если  необходимо)  диалога  функцией
                  term_dialog и его выгрузку – unload_dialog.
                         Согласно  представленной  структуре  lisp-программы,  работающей  с
                  диалоговыми  окнами,  функции  установки  параметров  (set_tile, mode_tile),
                  работы  со  списками  и  изображениями,  а  также  получения  значений  и
                  атрибутов  элементов  управления  (get_tile, get_attr)  можно  использовать
                  только  непосредственно  внутри  блока  инициализации  после  вызова
                  new_dialog, а также внутри выражений, обрабатывающих действия (атрибут
                  action и функция action_tile) до вызова done_dialog.
                         В  цикле  обработки  событий  (после  вызова  функции start_dialog)
                  нельзя вызывать функции AutoLisp, которые не связаны с диалоговым окном
                  или  требуют  ввода  пользователя,  не  имеющего  отношения  к  диалоговому
                  окну.  Если  необходимо  ввести  данные  в  режиме  графического  экрана
                  AutoCad, необходимо временно закрыть диалоговое окно вызовом функции
                  done_dialog,  при  этом  следует  запомнить  в  глобальных  или  локальных
                  переменных программы значения, выставленные пользователем в элементах

                                                                                                             65
   61   62   63   64   65   66   67   68   69   70   71