Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi MessageBox的一般问题_Delphi_Messagebox - Fatal编程技术网

Delphi MessageBox的一般问题

Delphi MessageBox的一般问题,delphi,messagebox,Delphi,Messagebox,messagebox(句柄“你真的想退出吗?”,“你确定吗?”,1) 在这个按钮中有两件事,用户可以做什么。好的,取消。 按下“取消”时,按钮在“确定”时关闭程序并结束对话框,我必须编写什么代码?首先,确保消息框中的按钮与文本匹配。因此,如果文本是“您真的想退出吗?”那么按钮应该是“是”和“否” 其次,使用适当的常量,以便以后更容易阅读代码。这将是: var Res: integer; Res := Application.MessageBox('Do you really want to

messagebox(句柄“你真的想退出吗?”,“你确定吗?”,1)

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

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

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

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;
编辑:请检查以下状态:

不必要的确认很烦人


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

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

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;
编辑:请检查以下状态:

不必要的确认很烦人


Delphi为显示messagebox提供了更好的解决方案。 我应该使用MessageDlg函数。MessageDlg(和MessageBox)函数的返回值表示用户的选择。因此,当您在消息DLG上放置“是”按钮时,当用户按下“是”按钮时,返回值将为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事件,CloseQuery事件在您尝试关闭mainform(如单击closebutton)时执行,并且有一个变量CanClose。将CanClose设置为True表示可以关闭主窗体,将其设置为false将阻止主窗体关闭:

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

Delphi为显示messagebox提供了更好的解决方案。 我应该使用MessageDlg函数。MessageDlg(和MessageBox)函数的返回值表示用户的选择。因此,当您在消息DLG上放置“是”按钮时,当用户按下“是”按钮时,返回值将为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事件,CloseQuery事件在您尝试关闭mainform(如单击closebutton)时执行,并且有一个变量CanClose。将CanClose设置为True表示可以关闭主窗体,将其设置为false将阻止主窗体关闭:

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

MessageDlg很好,但不是本地化的。如果他正在编写非英语程序,并且没有使用任何本地化方法,我建议使用Application.MessageBox。Application.MessageBox将加载windows本地化版本中的windows对话框。当我复制并粘贴您的第一个代码时,消息框会出现,但无论单击什么,都不会发生任何情况,消息框只会关闭。当你有一个新的Delphi VCL应用程序:添加一个按钮,在它的处理程序中添加:关闭;转到窗体,转到事件,添加FormClose事件。使eventhandler看起来像我的第二个代码示例;MessageDlg很好,但不是本地化的。如果他正在编写非英语程序,并且没有使用任何本地化方法,我建议使用Application.MessageBox。Application.MessageBox将加载windows本地化版本中的windows对话框。当我复制并粘贴您的第一个代码时,消息框会出现,但无论单击什么,都不会发生任何情况,消息框只会关闭。当你有一个新的Delphi VCL应用程序:添加一个按钮,在它的处理程序中添加:关闭;转到窗体,转到事件,添加FormClose事件。使eventhandler看起来像我的第二个代码示例;