其他分享
首页 > 其他分享> > (二章)实例1 无处不在的MessageBox对话框

(二章)实例1 无处不在的MessageBox对话框

作者:互联网

------------恢复内容开始------------

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等几种,这几种值,对应按下相应类型的按钮:确定、取消、是、否。在程序中,可以接受这几种按钮的返回值,分支处理相应的应用程序。

 

标签:PChar,MessageBox,二章,MB,ss,对话框,ss1
来源: https://www.cnblogs.com/AP0606436/p/15978870.html