在用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等方式來替代,經網友證明是安全可行的。