------------恢复内容开始------------
MessageBox对话框是一个最常用的对话框,用它显示提示信息最方便,也是最有效的手段。它的语法是这样的:
function MessageBox(handle:THandle;const Text,Caption:PChar;Flags:LongInt):Integer;
参数Text是要显示的内容,Caption为对话框的,Flags为对话框的按钮组合,如是、否、取消等。比较下面二个例子,它们有区别吗?
例一:
procedure TForm1.test();
begin
Application.MessageBox('文件已修改,要保存吗?','提示对话框',MB_YESNO);
//MessageBox(application.handle,'文件已修改,要保存吗?','提示对话框',MB_YESNO);
end;
例二:
procedure test();
var
ss1,ss2:AnsiString;
begin
ss1:='文件已修改,要保存吗?';
ss2:='提示对话框';
Application.MessageBox(ss1,ss2,MB_YESNO);
end;
第二个例子是初学者常犯的错误,AnsiString声明的字符串不能直接作为MessageBox的参数。怎么办?在应用程序中,AnsiString类型的字符串是经常用到的,运用它可以方便地进行字符之间的直接相加。PChar类型是不行的,而MessageBox的参数类型恰好是PChar型,为此只要对例二做如下修改就可以了。
procedure TForm1.text();
var
ss1,ss2:AnsiString;
begin
ss1:='文件已修改,要保存吗?';
ss2:='提示对话框';
Application.MessageBox(PChar(ss1),PChar(ss2),MB_YESNO);
end;
我们运用了类型强制转换方法,将AnsiString类型的字符串强制转换成了PChar类型,这样是一个很有用的方法,在字符串的转换中,常用到这个方法。
MessagBox也可以显示多行提示文本,如下所示:
procedure TForm1.text();
var
ss:AnsiString;
begin
ss:='多行提示示例';
ss:=ss+''#10'第一行';
ss:=ss+''#10'第二行';
ss:=ss+''#10'第三行';
Application.MessageBox(PChar(ss),'提示',MB_OK);
end;
从源代码可以看出,它利用了字符串的加法,在行与行之间加上了一个换行符#10。回车键#13和换行符#10在字符串运算中经常用到,要记住这两种符号的表示方法。其实,这两个字符的值就是13和10,十六进制表示为0x0d与0x0a。
我们常用到的MessageBox按钮有MB_OK、MB_OKCANCEL、MB_YESNO、MB_YESNOCANCEL,记住这几个就够了。
至于MessageBox的返回值,有IDOK,IDCANCEL,IDYES,IDNO等几种,这几种值,对应按下相应类型的按钮:确定、取消、是、否。在程序中,可以接受这几种按钮的返回值,分支处理相应的应用程序。