在之前的文章《深入了解Delphi 7中的四种消息框》了解到MessageDlg消息框不够强大,而Application.MessageBox、MessageBox实质都是Windows API函数MessageBox,无法根据自己需要所修改。于是,从MessageDlg入手,定制自己所需要的消息框。有时候我们需要在消息框上弹出的按钮不是“确定”、“是”、“否”等等,而需要“继续”、“退出”等按钮文本;有时候我们不需要消息框上还出现了标题栏的关闭按钮,给用户逃避选择的机会,于是去掉标题栏关闭按钮也是根据实际可能需要的。
自定义消息框MessageMyDlg函数原型:
{-------------------------------------------------------------------------------
过程名: MessageMyDlg
功能: 自定义的消息框
参数: Msg: string; 消息内容
MsgTitle: string; 消息标题
DlgType: TMsgDlgType; 消息显示图标
Buttons: TMyMsgDlgButtons; 消息按钮集合
ShowClose: Boolean 消息框标题栏关闭按钮的显示
返回值: Integer
-------------------------------------------------------------------------------}
function MessageMyDlg( const Msg, MsgTitle: string; DlgType: TMsgDlgType; Buttons: TMyMsgDlgButtons; ShowClose: Boolean): Integer;
过程名: MessageMyDlg
功能: 自定义的消息框
参数: Msg: string; 消息内容
MsgTitle: string; 消息标题
DlgType: TMsgDlgType; 消息显示图标
Buttons: TMyMsgDlgButtons; 消息按钮集合
ShowClose: Boolean 消息框标题栏关闭按钮的显示
返回值: Integer
-------------------------------------------------------------------------------}
function MessageMyDlg( const Msg, MsgTitle: string; DlgType: TMsgDlgType; Buttons: TMyMsgDlgButtons; ShowClose: Boolean): Integer;
自定义消息框源码:(展开即可显示)
使用示例:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;
type
TForm1 = class(TForm)
btn1: TButton;
xpmnfst1: TXPManifest;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses MyMessagebox;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
MessageDlg( '这是MessageDlg弹出消息框',mtError,mbYesNoCancel, 0); //全英文
MessageMyDlg( '这是MessageMyDlg弹出消息框', '自定义标题',mtError,mcYesNoCancel,False); //全中文
case MessageMyDlg( '您的操作还未完成?' + # 13# 13 + '请点击“继续”按钮继续完成操作,如果您想终止操作,' + # 13 + '请点击“退出”按钮。', '提示', mtInformation, [mcContinute, mcExit]) of
mrContinute: ShowMessage( '按了继续按钮');
mrExit: ShowMessage( '按了退出按钮');
else ShowMessage( '按了标题栏的关闭按钮');
end;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;
type
TForm1 = class(TForm)
btn1: TButton;
xpmnfst1: TXPManifest;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses MyMessagebox;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
MessageDlg( '这是MessageDlg弹出消息框',mtError,mbYesNoCancel, 0); //全英文
MessageMyDlg( '这是MessageMyDlg弹出消息框', '自定义标题',mtError,mcYesNoCancel,False); //全中文
case MessageMyDlg( '您的操作还未完成?' + # 13# 13 + '请点击“继续”按钮继续完成操作,如果您想终止操作,' + # 13 + '请点击“退出”按钮。', '提示', mtInformation, [mcContinute, mcExit]) of
mrContinute: ShowMessage( '按了继续按钮');
mrExit: ShowMessage( '按了退出按钮');
else ShowMessage( '按了标题栏的关闭按钮');
end;
end;
end.
结果如下图所示: