2009-02-09 51 views
0

messagebox(句柄,'你真的想退出嗎?','你確定嗎?',1);消息框一般問題

在這個按鈕中有兩件事情,用戶可以做什麼。好的,取消。 我必須寫什麼代碼,按下「取消」按鈕關閉程序並結束對話框?

回答

2

德爾福提供更好的解決方案來顯示一個消息框。 我應該使用MessageDlg函數。 MessageDlg(和MessageBox)函數的返回值表示用戶的選擇。所以,當你在MessageDlg上放置一個yes按鈕時,當用戶按下Yes按鈕時,返回值將是mrYes。 所以,你的代碼會是這樣的:

var 
    ShouldClose: Boolean; 
begin 
    if MessageDlg('Do you really want to quit?', mtConfirmation, 
     [mbYes, mbNo], 0) = mrYes then 
    ShouldClose := True 
    else 
    ShouldClose := False; 
end; 

你也想關閉您的應用程序,如果用戶選擇是。 當你有一個普通的Delphi VCL應用程序時,你可以實現你的mainform的CloseQuery事件,當你嘗試關閉你的mainform(像點擊關閉按鈕)並且有一個變量CanClose時,執行CloseQuery事件。將CanClose設置爲True意味着MainForm可以關閉,將其設置爲false會阻止您的mainform關閉:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
begin 
    CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes; 
end; 
+0

MessageDlg很好,但沒有本地化。如果他正在編寫非英文程序並且不使用任何方法進行本地化,我建議使用Application.MessageBox。 Application.MessageBox,將在windows本地化版本中加載windows對話框。 – 2009-02-09 13:02:05

3

首先,確保消息框中的按鈕與文本匹配。所以如果文字是「你真的想退出嗎?」那麼按鈕應該是「是」和「否」。

其次,使用適當的常量,以便稍後您的代碼更容易閱讀。那將是:

var 
    Res: integer; 

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?', 
    MB_ICONQUESTION or MB_YESNO); 

結果將是IDYES或IDNO。因此,假設呼叫是主窗體的方法裏面,你會用它想:

if Res = IDYES then 
    Close; 

如果從其他地方調用該方法,你也可以撥打

if Res = IDYES then 
    Application.Terminate; 

編輯:請不要也檢查出Vista User Inteface Guidelines on dialog boxes其狀態:

不必要的確認是煩人