2009-04-18 64 views
3

在我的Delphi应用程序中,我有一个自定义的Yes,No,Cancel对话框,将从主窗体调用以确认保存对当前编辑的文件所做的更改。这通常通过的MessageDlg()来实现,但是我想这个对话已经定制的外观,所以我想实现由更改form.showModal的默认模态结果

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

问题这个功能,默认情况下,表单反应按下Esc回车键mrNoTModalResult。你可以看到BAAAD是怎么回事,因为你的直觉告诉你,Esc-aping模态对话将取消预期的Quit Application过程,但实际上发生的是你发出的不保存任何更改命令和应用程序退出。

我没有注意到这种行为,直到我以这种方式失去了一个小时的工作。没有FormKeyPressed事件处理程序或什么响应按键被放入myModalDialogue代码。它的工作原理如下:使用showModal显示的格式按Esc将返回mrNo。我如何覆盖这种默认行为?

回答

15

您需要确保“否”按钮的Cancel属性为False,并且“Cancel”按钮的Cancel属性为True。

+0

这工作。谢谢! – 2009-04-18 09:55:16

4

设置对话框中按钮的取消和默认属性。

+0

+1以获得正确的答案。谢谢,我简直不敢相信这很简单......而且我正在努力解决这个问题...... – 2009-04-18 09:53:29