> Andrey
Не совсем так вы поняли, совсем не так.
Переменным len, wid, hei присваиваются значения, введенные в соответствующие поля edit_box диалога, а не из popup_list, которого просто нет в том диалоге. Поскольку на тот момент не было известно, что надо делать с введенными значениями, я просто объединил их в одну текстовую строку. Точка вставки тоже была неизвестна. Ну, я и вставил текст в начало координат.
Вот пример диалога и программы вставки текстовых строк, выбранных из списка в диалоге.
Файл dd_param.dcl
param : dialog {
label = "Параметры объекта.";
:row {
fixed_width = true;
: boxed_column {
label = "Высота ";
fixed_width = true;
: popup_list {
key = "height";
edit_width =10;
}
}
: boxed_column {
label="Глубина";
fixed_width = true;
: popup_list {
key = "depth";
edit_width = 10;
}
}
: boxed_column {
label="Ширина";
fixed_width = true;
: popup_list {
key = "width";
edit_width = 10;
}
}
}
ok_cancel_help;
}
Файл dd_param.lsp
(defun get_height ( / l_height)
(setq l_height (list " Нажать" " 100" " 200" " 300" " 400" " 500" ))
(start_list "height")
(mapcar 'add_list l_height)
(end_list)
(if (not sh_indx) (setq sh_indx "0"))
(set_tile "height" sh_indx)
(mode_tile "height" 2)
)
(defun do_height ( / pth)
(cond
((= hei 1) (setq heigh "100"))
((= hei 2) (setq heigh "200"))
((= hei 3) (setq heigh "300"))
((= hei 4) (setq heigh "400"))
((= hei 5) (setq heigh "500"))
) ;end cond
(setq pth (getpoint "\n Укажите точку вставки высоты объекта: "))
(command "_TEXT" pth "" "" heigh)
)
(defun get_depth ( / l_depth)
(setq l_depth (list " Нажать" " 100" " 200" " 300" " 400" " 500" ))
(start_list "depth")
(mapcar 'add_list l_depth)
(end_list)
(if (not sd_indx) (setq sd_indx "0"))
(set_tile "depth" sd_indx)
(mode_tile "depth" 2)
)
(defun do_depth ( / ptd)
(cond
((= dep 1) (setq depth "100"))
((= dep 2) (setq depth "200"))
((= dep 3) (setq depth "300"))
((= dep 4) (setq depth "400"))
((= dep 5) (setq depth "500"))
) ;end cond
(setq ptd (getpoint "\n Укажите точку вставки глубины объекта: "))
(command "_TEXT" ptd "" "" depth)
)
(defun get_width ( / l_width)
(setq l_width (list " Нажать" " 100" " 200" " 300" " 400" " 500" ))
(start_list "width")
(mapcar 'add_list l_width)
(end_list)
(if (not sw_indx) (setq sw_indx "0"))
(set_tile "width" sw_indx)
(mode_tile "width" 2)
)
(defun do_width ( / ptw)
(cond
((= wid 1) (setq width "100"))
((= wid 2) (setq width "200"))
((= wid 3) (setq width "300"))
((= wid 4) (setq width "400"))
((= wid 5) (setq width "500"))
) ;end cond
(setq ptw (getpoint "\n Укажите точку вставки ширины объекта: "))
(command "_TEXT" ptw "" "" width)
)
(defun do_help ()
(alert " Справка находится в разработке.")
(princ)
)
(defun C:PARAM ( / echo dcl_id hei dep wid done)
(setq echo (getvar "CMDECHO"))
(setvar "cmdecho" 0)
(setq dcl_id (load_dialog "dd_param.dcl"))
(if (not (new_dialog "param" dcl_id))
(exit)
)
(get_height)
(get_depth)
(get_width)
(action_tile "height" "(setq hei (read (setq sh_indx $value)))")
(action_tile "depth" "(setq dep (read (setq sd_indx $value)))")
(action_tile "width" "(setq wid (read (setq sw_indx $value)))")
(action_tile "accept" "(setq done 1)(done_dialog)")
(action_tile "cancel" "(setq done 2)(done_dialog)")
(action_tile "help" "(do_help)")
(start_dialog)
(unload_dialog dcl_id)
(if (and hei dep wid (= done 1))
(progn
(do_height)
(do_depth)
(do_width)
) ; progn
(princ "\n Не заданы все размеры!")
) ; if
(if (= done 2) (princ "\n Отмена."))
(setvar "CMDECHO" echo)
(princ)
)