Я, наверно, плохо умею объяснять. С самого начала и пытаюсь сказать, что такая кнопка ДОЛЖНА быть одна, но МОЖЕТ их быть и несколько. И судя по тому, как была описана проблема, именно это и происходит. Если таких кнопок СЛУЧАЙНО оказалось несколько, то никакой ошибки нигде не выскочит, но что при этом будет выполнятся по нажатию Esc, и что будет возвращать (start_dialog), зависит от данного конкретного диалога.
Например:
cancel_test : dialog {
label = "is_cancel";
: spacer { height = 1; }
: row {
ok_only;
: button {
key = "cancel";
label = "Выход";
is_cancel = true;
}
}
}
(defun cancel_test ( / dcl_id select)
(setq dcl_id (load_dialog "tmp.dcl"))
(new_dialog "cancel_test" dcl_id)
(action_tile "accept" "(alert \"OK\")")
(action_tile "cancel" "(alert \"Cancel\")")
(setq select (start_dialog))
(unload_dialog dcl_id)
select
);defun
Всегда возвращает 0, а по Esc и по Enter выполняется разное. И внешне выглядит, что кнопка с is_cancel = true - всего одна.
Кончено именно так никто писать не будет, но в каком-то сложном диалоге, какая-либо подобная ситуация случайно возникнуть может.
И все, что нужно сделать - это внимательно просмотреть и свой диалог, и возможные ссылки на предопределения в других. И исключить ситуацию, чтобы было несколько is_cancel = true.