Тема: Помогите разобраться
Никак не могу понять почему не происходит отрисовка строки текста,выбранной из edit_box.Вернее текст отрисовывается,если переключиться на list_box выбрать там строку и вернуться обратно в edit_box.А вот отрисовка текста из list_box идет сразу.Привожу файлы dcl и lsp ниже.
[code]//---stroka.dcl------------------------------------------------
//--------------------------------------------------------------
//dcl_settings : default_dcl_settings { audit_level = 3; }
stxt : dialog {
label = "Строка текста";
: row {
: boxed_radio_column {
label = "Способ выбора";
: radio_button {
label = "Введите текст:";
fixed_width = true;
key = "on_s1txt";
}
: radio_button {
label = "Выберите текст:";
fixed_width = true;
key = "on_s2txt";
}
spacer_1;
}
: boxed_column {
label = "Строка";
: edit_box {
key = "s1txt";
fixed_width = true;
edit_width = 19;
}
: list_box {
// label = " ";
key = "s2txt";
height = 8;
}
spacer_1;
}
}
: popup_list {
label = "Высота текста:";
key = "szpop_txt";
list = "";
edit_width = 5;
fixed_width = true;
}
spacer_1;
ok_cancel_help_info;
}
//***************************************************************
//------------------------------------------------------------------------
ab_text : dialog {
label = "О программе";
: list_box {
key = "ab_progr";
height = 20;
width = 58;
}
ok_only;
}
//-----------> THE END <----------------------------[code]
Сам лисп
[code];;;stroka.lsp
;;;-------------> HELP <------------------------------------------------
(defun ab_prog (ab_progr /)
(if (not (new_dialog "ab_text" DCL_ID))
(exit)
)
(start_list "ab_progr")
(mapcar 'add_list ab_progr)
(end_list)
(action_tile "accept" "(done_dialog)")
(start_dialog)
)
;;;-------------> WORKING FUNCTION <------------------------------------
(defun w_str (n stxt sz_t / a_txt p_txt)
(setq a_txt stxt)
(print n)
(setq p_txt (getpoint "\n Точка вставки"))
(command "_.TEXT" p_txt sz_t "0" a_txt)
)
;;;-------------> MAIN FUNCTION <---------------------------------------
(defun c:stroka (/ $value s1txt s2txt siz a_sel sz_txt help_pr info_pr old_snap shrift clar NAMES oscor dialogLoaded dialogShow new_s1txt)
(setq old_snap (getvar "osmode")
clar (getvar "CLAYER")
oscor (getvar "OSNAPCOORD")
)
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "OSNAPCOORD" 1)
(setq help_pr (list
" - отрисовка текста - " " "
" Введите нужный текст или выберите из списка,"
" выберете требуемую высоту шрифта (3,5-по умолчанию) "
)
info_pr (list " - Программа отрисовка текста - ")
)
(setq dialogLoaded T
dialogShow T
)
;;; загрузка диалогового окна
(if (= -1 (setq DCL_ID (load_dialog "stroka.dcl")))
(progn
(princ "\nНевозможно загрузить <stroka.dcl>")
(setq dialogLoaded nil)
) ;progn
) ;if
;;;Инициализируется окно диалога stxt
(if (and dialogLoaded
(not (new_dialog "stxt" dcl_id))
) ;and
(progn
(princ "\nНевозможно показать окно диалога")
(setq dialogShow nil)
(exit)
) ;_ end of progn
) ;_ end of if
;;; установки по умолчанию
(setq sz_txt (rtos 3.5 2 2) ;высота шрифта по умолчанию
shrift '("1.8" "2.5" "3.5" "5" "7" "10" "14" "20" "28" "40")
)
(setq NAMES '("Текст1" "Текст2" "Текст3" "Текст4"))
;;; установки по умолчанию для диалогового окна
(if (and dialogLoaded dialogShow)
(progn
(set_tile "on_s1txt" "1") ;включает тайл "on_s1txt"
(set_tile "s1txt" "См.п.1") ;Инициализирует поле со значением s1txt по умолчанию
(set_tile "sz_txt" sz_txt)
) ;progn
)
;;;формирование списков
(start_list "s2txt") ;Определяет имя списка тайла "s2txt"
(mapcar 'add_list NAMES) ;Определяет список
(end_list) ;конец обработки списка
(start_list "szpop_txt")
(mapcar 'add_list shrift)
(end_list)
(mode_tile "s1txt" 2) ; Установить фокус ввода на тайл "s1txt"
(mode_tile "s2txt" 1) ; отключить тайл "s2txt"
(mode_tile "s1txt" 3) ;выделить содержимое
;;;назначение действий элементам окна
(action_tile "s1txt" "(setq new_s1txt $value)")
(action_tile
"s2txt"
"(setq siz (atof (get_tile \"s2txt\")))"
)
(action_tile
"szpop_txt"
"(setq sz_txt (nth (atoi $value) shrift))"
)
(action_tile
"strelka"
"(setq strelka (nth (atoi $value) nachalo))"
)
(action_tile
"on_s1txt"
"(progn (mode_tile \"s2txt\" 4)(mode_tile \"s2txt\" 1)
(mode_tile \"s1txt\" 0)(mode_tile \"s1txt\" 2)(mode_tile \"s1txt\" 3)
(setq a_sel 1))"
)
(action_tile
"on_s2txt"
"(progn (mode_tile \"s2txt\" 0)(mode_tile \"s2txt\" 2)
(mode_tile \"s1txt\" 1)(setq a_sel 2))"
)
(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "help" "(ab_prog help_pr)")
(action_tile "info" "(ab_prog info_pr)")
;;;отображение диалога
(setq what_next (start_dialog)
sz_txt (atof sz_txt))
(setq siz (fix siz))
(setq siz (nth siz NAMES))
;;; При правильном вводе и нажатии кнопки "Ok" - вызов функции
(if (= 1 what_next)
(cond ((= a_sel 1)
(w_str a_sel new_s1txt sz_txt)
)
((= a_sel 2)
(w_str a_sel siz sz_txt)
)
)
)
(unload_dialog dcl_id)
(setvar "cmdecho" 1)
(setvar "osmode" old_snap)
(setvar "CLAYER" clar)
(setvar "OSNAPCOORD" oscor)
(princ)
)
;;;---------> THE END <------------------------------------------
[/code]