随笔 - 809  文章 - 0 评论 - 144 阅读 - 770万

在 Delphi 中,MessageDlgMessageBox 都可以用于显示消息对话框,但它们在使用方式、功能特性和适用场景等方面存在一些差异。下面分别介绍它们的用法。

1. MessageDlg 函数

1.1 所在单元

MessageDlg 函数位于 Dialogs 单元。

1.2 函数原型

function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;

1.3 参数说明

  • Msg:要显示的消息文本。
  • DlgType:对话框的类型,是 TMsgDlgType 枚举类型,常见取值有:
    • mtWarning:警告消息。
    • mtError:错误消息。
    • mtInformation:信息消息。
    • mtConfirmation:确认消息。
    • mtCustom:自定义消息。
  • Buttons:对话框中显示的按钮集合,是 TMsgDlgButtons 类型,常见取值有:
    • mbOK:仅显示“确定”按钮。
    • mbOKCancel:显示“确定”和“取消”按钮。
    • mbYesNo:显示“是”和“否”按钮。
    • mbYesNoCancel:显示“是”、“否”和“取消”按钮。
  • HelpCtx:帮助上下文编号,一般设为 0。

1.4 返回值

返回用户点击的按钮对应的整数值,例如 mrOK(点击“确定”)、mrCancel(点击“取消”)等。

1.5 示例代码

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Result: Integer;
begin
  Result := MessageDlg('你确定要执行此操作吗?', mtConfirmation, [mbYes, mbNo], 0);
  if Result = mrYes then
    ShowMessage('你选择了“是”');
end;

end.

2. MessageBox 函数

2.1 所在单元

MessageBox 函数位于 Windows 单元。

2.2 函数原型

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;

2.3 参数说明

  • hWnd:对话框所属窗口的句柄,若为 0 则表示对话框没有父窗口。
  • lpText:要显示的消息文本。
  • lpCaption:对话框的标题。
  • uType:对话框的样式,是一个 UINT 类型的值,可以通过组合不同的标志位来指定,常见标志位有:
    • MB_OK:仅显示“确定”按钮。
    • MB_OKCANCEL:显示“确定”和“取消”按钮。
    • MB_YESNO:显示“是”和“否”按钮。
    • MB_ICONINFORMATION:显示信息图标。
    • MB_ICONWARNING:显示警告图标。
    • MB_ICONERROR:显示错误图标。

2.4 返回值

返回用户点击的按钮对应的整数值,例如 IDOK(点击“确定”)、IDCANCEL(点击“取消”)等。

2.5 示例代码

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Result: Integer;
begin
  Result := MessageBox(Handle, '这是一条警告消息!', '警告', MB_OK or MB_ICONWARNING);
  if Result = IDOK then
    ShowMessage('你点击了“确定”');
end;

end.

3. 两者对比

  • 易用性MessageDlg 使用更方便,参数采用枚举类型,语义更清晰;MessageBox 需要组合标志位来设置样式,相对复杂一些。
  • 跨平台性MessageDlg 是 Delphi 封装的函数,具有较好的跨平台性;MessageBox 是 Windows API 函数,只能在 Windows 平台使用。
  • 功能扩展性MessageDlg 可以通过 Delphi 的 VCL 框架进行扩展和定制;MessageBox 是底层的 Windows 函数,功能相对固定。

在实际开发中,建议优先使用 MessageDlg,除非有特殊需求需要调用 Windows API。

posted on   del88  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2017-02-15 IntelliJ IDEA 自动导入包的问题
2017-02-15 jersey中的405错误 method not allowed
2017-02-15 jersey中的 404 Not Found 错误。
2012-02-15 西部数码 云端 VPS SQL2000 连接 原理 和本地数据库 对接原理
点击右上角即可分享
微信分享提示