黄回金 發表於 2025-2-15 17:15:00

delphi MessageDlg 和 MessageBox的用法

<p>在 Delphi 中,<code>MessageDlg</code> 和 <code>MessageBox</code> 都可以用于显示消息对话框,但它们在使用方式、功能特性和适用场景等方面存在一些差异。下面分别介绍它们的用法。</p>
<h3 id="1-messagedlg-函数">1. <code>MessageDlg</code> 函数</h3>
<h4 id="11-所在单元">1.1 所在单元</h4>
<p><code>MessageDlg</code> 函数位于 <code>Dialogs</code> 单元。</p>
<h4 id="12-函数原型">1.2 函数原型</h4>
<pre><code class="language-delphi">function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
</code></pre>
<h4 id="13-参数说明">1.3 参数说明</h4>
<ul>
<li><code>Msg</code>:要显示的消息文本。</li>
<li><code>DlgType</code>:对话框的类型,是 <code>TMsgDlgType</code> 枚举类型,常见取值有:
<ul>
<li><code>mtWarning</code>:警告消息。</li>
<li><code>mtError</code>:错误消息。</li>
<li><code>mtInformation</code>:信息消息。</li>
<li><code>mtConfirmation</code>:确认消息。</li>
<li><code>mtCustom</code>:自定义消息。</li>
</ul>
</li>
<li><code>Buttons</code>:对话框中显示的按钮集合,是 <code>TMsgDlgButtons</code> 类型,常见取值有:
<ul>
<li><code>mbOK</code>:仅显示“确定”按钮。</li>
<li><code>mbOKCancel</code>:显示“确定”和“取消”按钮。</li>
<li><code>mbYesNo</code>:显示“是”和“否”按钮。</li>
<li><code>mbYesNoCancel</code>:显示“是”、“否”和“取消”按钮。</li>
</ul>
</li>
<li><code>HelpCtx</code>:帮助上下文编号,一般设为 0。</li>
</ul>
<h4 id="14-返回值">1.4 返回值</h4>
<p>返回用户点击的按钮对应的整数值,例如 <code>mrOK</code>(点击“确定”)、<code>mrCancel</code>(点击“取消”)等。</p>
<h4 id="15-示例代码">1.5 示例代码</h4>
<pre><code class="language-delphi">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, , 0);
if Result = mrYes then
    ShowMessage('你选择了“是”');
end;

end.
</code></pre>
<h3 id="2-messagebox-函数">2. <code>MessageBox</code> 函数</h3>
<h4 id="21-所在单元">2.1 所在单元</h4>
<p><code>MessageBox</code> 函数位于 <code>Windows</code> 单元。</p>
<h4 id="22-函数原型">2.2 函数原型</h4>
<pre><code class="language-delphi">function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
</code></pre>
<h4 id="23-参数说明">2.3 参数说明</h4>
<ul>
<li><code>hWnd</code>:对话框所属窗口的句柄,若为 <code>0</code> 则表示对话框没有父窗口。</li>
<li><code>lpText</code>:要显示的消息文本。</li>
<li><code>lpCaption</code>:对话框的标题。</li>
<li><code>uType</code>:对话框的样式,是一个 <code>UINT</code> 类型的值,可以通过组合不同的标志位来指定,常见标志位有:
<ul>
<li><code>MB_OK</code>:仅显示“确定”按钮。</li>
<li><code>MB_OKCANCEL</code>:显示“确定”和“取消”按钮。</li>
<li><code>MB_YESNO</code>:显示“是”和“否”按钮。</li>
<li><code>MB_ICONINFORMATION</code>:显示信息图标。</li>
<li><code>MB_ICONWARNING</code>:显示警告图标。</li>
<li><code>MB_ICONERROR</code>:显示错误图标。</li>
</ul>
</li>
</ul>
<h4 id="24-返回值">2.4 返回值</h4>
<p>返回用户点击的按钮对应的整数值,例如 <code>IDOK</code>(点击“确定”)、<code>IDCANCEL</code>(点击“取消”)等。</p>
<h4 id="25-示例代码">2.5 示例代码</h4>
<pre><code class="language-delphi">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.
</code></pre>
<h3 id="3-两者对比">3. 两者对比</h3>
<ul>
<li><strong>易用性</strong>:<code>MessageDlg</code> 使用更方便,参数采用枚举类型,语义更清晰;<code>MessageBox</code> 需要组合标志位来设置样式,相对复杂一些。</li>
<li><strong>跨平台性</strong>:<code>MessageDlg</code> 是 Delphi 封装的函数,具有较好的跨平台性;<code>MessageBox</code> 是 Windows API 函数,只能在 Windows 平台使用。</li>
<li><strong>功能扩展性</strong>:<code>MessageDlg</code> 可以通过 Delphi 的 VCL 框架进行扩展和定制;<code>MessageBox</code> 是底层的 Windows 函数,功能相对固定。</li>
</ul>
<p>在实际开发中,建议优先使用 <code>MessageDlg</code>,除非有特殊需求需要调用 Windows API。</p>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/18717188</p><br><br>
来源:https://www.cnblogs.com/del88/p/18717188
頁: [1]
查看完整版本: delphi MessageDlg 和 MessageBox的用法