天天看点

Delphi XE之路(7)Mobile MessageDlg函数

在用xe5创建了移动应用后,一般会在工程里添加system.types, system.uitypes,fmx.dialogs单元,这里面定义了messagedlg函数用到的声明、枚举类型定义等。

正常情况下,在windows下使用messagedlg函数其定义是:

function messagedlg(const msg: string; dlgtype: tmsgdlgtype; buttons: tmsgdlgbuttons; helpctx: longint): integer;

具体使用方法是:

if mesagedlg('您要退出应用吗?',mtinformation,[mryes,mrno],0)=mbyes then

   ........

但在mobile(fmx架构)下的应用却不是这样,编译会报错。原来xe5开发移动应用(不知道开发winfors是不是也这样)在引用枚举类型时也要像引用类成员一样,加类标识符

if messagedlg('要退出吗',tmsgdlgtype.mtwarning,[tmsgdlgbtn.mbyes,tmsgdlgbtn.mbno],0)=mryes then

这样在xe5下的编译就能通过了

注:使用这个函数有个缺陷--即如果你在程序中点了手机的返回键(硬件),此时应用程序弹出对话框让你确认操作,但不小心来了电话或切换到其它程序中去了,这时你返回来的时候便会出现死机的情况(有人说这是emb的一个设计错误,一个bug),但如果在没有弹出这个对话框的时候进行切换则不会出现死机状况。至今还没有解决之道,希望有机会能解决这个难题。

另外,在应用程序中执行确认操作可以使用tpopup等方式来替代,经网友证实是安全可行的。

继续阅读