我只是试图执行安装Delphi xe7期间给出的示例,Android平台上的MessageAlerts,遗憾的是它不起作用,它给出了以下错误消息:
阻止此平台未实现的对话
procedure TMessageAlertsForm.btnMultiButtonAlertClick(Sender: TObject);
begin
{ Show a multiple-button alert that triggers different code blocks according to
your input }
case MessageDlg('Choose a button:', System.UITypes.TMsgDlgType.mtInformation,
[
System.UITypes.TMsgDlgBtn.mbYes,
System.UITypes.TMsgDlgBtn.mbNo,
System.UITypes.TMsgDlgBtn.mbCancel
], 0) of
{ Detect which button was pushed and show a different message }
mrYES:
ShowMessage('You chose Yes');
mrNo:
ShowMessage('You chose No');
mrCancel:
ShowMessage('You chose Cancel');
end;
end;
任何想法如何解决?
答案 0 :(得分:20)
XE7发行说明中对此进行了解释:
Dialog Box Methods Support Anonymous Methods to Handle Their Closing
在XE6中,对对话框方法(InputBox,InputQuery,MessageDlg,ShowMessage)的调用始终是阻塞的。在对话框关闭之前,不会执行调用其中一个方法之后的任何代码。 Android不允许阻止对话框,因此您无法在Android上使用这些方法。
在XE7上,InputBox,InputQuery和MessageDlg支持新的可选参数 ACloseDialogProc 。包含此新参数的调用适用于所有平台,包括Android。这个新的可选参数允许您提供在对话框关闭时调用的匿名方法。当您使用此新参数调用这些方法时,您的呼叫在桌面平台中阻塞,在移动平台中无阻塞。如果在关闭对话框后需要执行代码,请使用此新参数以确保应用程序在所有支持的平台上按预期工作。
...
ShowMessage在XE7中也获得了对Android的支持,对ShowMessage的调用在桌面平台上是阻塞的,在移动平台上是非阻塞的。但是,ShowMessage不提供任何新参数来处理其关闭。 如果您需要在ShowMessage显示的对话框关闭后执行代码,请使用MessageDlg而不是ShowMessage。
例如:
procedure TMessageAlertsForm.btnMultiButtonAlertClick(Sender: TObject);
begin
MessageDlg('Choose a button:', System.UITypes.TMsgDlgType.mtInformation,
[
System.UITypes.TMsgDlgBtn.mbYes,
System.UITypes.TMsgDlgBtn.mbNo,
System.UITypes.TMsgDlgBtn.mbCancel
], 0,
procedure(const AResult: System.UITypes.TModalResult)
begin
case AResult of
mrYES:
ShowMessage('You chose Yes');
mrNo:
ShowMessage('You chose No');
mrCancel:
ShowMessage('You chose Cancel');
end;
end);
end;
end;