Назначение действий элементам окна
Создание проекта и добавление элементов интерфейса
|
| ||||
Назначение действий элементам окна | |||||
В файле DCL описывается только статическая внешняя форма диалогового окна. Теперь свяжем это описание с кодом AutoLISP, «оживляющим» окно. Используем для этого функцию action_tile, как показано в следующем фрагменте:
;; Assign actions (the functions to be invoked) to dialog buttons (action_tile "gp_lw" "(setq plineStyle \"Light\")" ) (action_tile "gp_hw" "(setq plineStyle \"Pline\")" ) (action_tile "gp_actx" "(setq objectCreateMethod \"ActiveX\")" ) (action_tile "gp_emake" "(setq objectCreateMethod \"Entmake\")" ) (action_tile "gp_cmd" "(setq objectCreateMethod \"Command\")" ) (action_tile "cancel" "(done_dialog) (setq UserClick nil)") (action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" ) ) Обратим внимание на кавычки вокруг кода AutoLISP. Функция AutoLISP action_tile сообщает элементу окна строку в кавычках, которую элемент должен будет вернуть при его выборе. Строка (все, что находится внутри кавычек) бездействует до тех пор, пока пользователь не выберет элемент окна. Именно тогда элемент окна передает строку в AutoCAD, где строка преобразуется в рабочий код AutoLISP и выполняется. Например, рассмотрим следующее выражение action_tile, которое связано с положением переключателя для компактной полилинии: (action_tile "gp_lw" "(setq plineStyle \"Light\")" ) Код присваивает положению переключателя строку «(setq plineStyle \"Light\")». Когда пользователь переводит переключатель в данное положение, строка передается в AutoCAD и преобразуется непосредственно в следующее выражение AutoLISP: (setq plineStyle "Light") Рассмотрим еще один фрагмент кода. Следующее выражение action_tile присвоено кнопке «OK»: (action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" ) При нажатии кнопки "OK" длинная строка, назначенная кнопке, передается в AutoCAD и преобразуется в следующий код на AutoLISP: (progn (setq tileRad (atof (get_tile "gp_trad"))) (setq tileSpace (atof (get_tile "gp_spac"))) (done_dialog) (setq UserClick T) ) Код выполняет несколько действий. Он извлекает текущие значения элементов диалогового окна с ключевыми значениями gp_trad (радиус плитки) и gp_spac(расстояние между плитками). Затем с помощью функции atof строка чисел преобразуется в вещественное число. Функция done_dialog прерывает работу диалогового окна, и переменной UserClick присваивается значение T (истина). Кнопкам диалогового окна назначены действия. Следующий этап заставить их работать. |