消息框一般问题

问题描述:

messagebox(句柄,'你真的想退出吗?','你确定吗?',1);消息框一般问题

在这个按钮中有两件事情,用户可以做什么。好的,取消。 我必须写什么代码,按下“取消”按钮关闭程序并结束对话框?

德尔福提供更好的解决方案来显示一个消息框。 我应该使用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

首先,确保消息框中的按钮与文本匹配。所以如果文字是“你真的想退出吗?”那么按钮应该是“是”和“否”。

其次,使用适当的常量,以便稍后您的代码更容易阅读。那将是:

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其状态:

不必要的确认是烦人