2009-04-18 100 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