Изменение модального результата по умолчанию для form.showModal - PullRequest
3 голосов
/ 18 апреля 2009

В моем приложении 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-aping модального диалога ОТМЕНИТ предполагаемый процесс выхода из приложения, но на самом деле, что происходит, вы запускаете Не сохраняйте никаких изменений команда и приложение закрываются.

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

Ответы [ 2 ]

15 голосов
/ 18 апреля 2009

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

4 голосов
/ 18 апреля 2009

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

...