Изменение модального результата по умолчанию для form.showModal

В моем приложении Delphi у меня есть настраиваемый диалог «Да», «Нет», «Отмена», который будет вызываться из основной формы для подтверждения сохранения изменений, внесенных в текущий редактируемый файл. Обычно это достигается с помощью messageDlg (), но я хотел, чтобы этот диалог имел индивидуальный вид, поэтому я пытаюсь достичь этой функциональности с помощью

case myDialogue.showModal of
  mrYes: <<save changes>>;
  mrNo: <<quit application without saving changes>>
  mrCancel: <<set the closeAction to caNone and do nothing>>
end;

Проблема в том, что по умолчанию форма реагирует на нажатие клавиши Escape, возвращая mrNo TModalResult. И вы можете видеть, как это работает BAAAD, поскольку ваша интуиция подсказывает вам, что нажатие Esc на модальный диалог ОТМЕНЯЕТ предполагаемый процесс выхода из приложения, но на самом деле происходит следующее: вы выдаете Не сохранять никаких изменений Команда и приложение завершают работу.

Я не замечал такого поведения, пока не потерял час работы таким образом. В код myModalDialogue не было помещено ни обработчика событий FormKeyPressed, ни чего-либо, отвечающего на нажатия клавиш. Просто так работает, что нажатие Esc в формах, показанных с использованием showModal, вернет mrNo. Как я могу изменить это поведение по умолчанию?


person Peter Perháč    schedule 18.04.2009    source источник


Ответы (2)


Вы должны убедиться, что свойство Отмена кнопки «Нет» имеет значение Ложь, а свойство Отмена кнопки «Отмена» - Истина.

person mghie    schedule 18.04.2009

Задайте для кнопок свойства «Отмена» и «По умолчанию» в диалоговом окне.

person Community    schedule 18.04.2009
comment
+1 за правильный ответ. Спасибо, не могу поверить, что это было так просто ... И я сходил с ума, пытаясь это исправить ... - person Peter Perháč; 18.04.2009