Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delphixe7android中的Messagedlg_Android_Delphi_Firemonkey_Delphi Xe7 - Fatal编程技术网

delphixe7android中的Messagedlg

delphixe7android中的Messagedlg,android,delphi,firemonkey,delphi-xe7,Android,Delphi,Firemonkey,Delphi Xe7,我只是尝试执行安装Delphi xe7时给出的示例,android平台上的MessageAlerts,不幸的是它不工作,它给出了以下错误消息: 阻止在此平台中未实现的对话框 知道如何解决吗?XE7发行说明对此进行了解释: 在XE6中,对对话框方法(InputBox、InputQuery、MessageDlg、ShowMessage)的调用总是被阻塞。调用其中一个方法后的任何代码都不会执行,直到对话框关闭Android不允许阻止对话框,因此您无法在Android上使用这些方法。 在XE7上,In

我只是尝试执行安装Delphi xe7时给出的示例,android平台上的MessageAlerts,不幸的是它不工作,它给出了以下错误消息:

阻止在此平台中未实现的对话框


知道如何解决吗?

XE7发行说明对此进行了解释:

在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;

您应该始终将通用标记添加到与delphi相关的问题中,以使正确的语法更加突出,并更加关注您的问题。我们是否可以将
System.UITypes.TMsgDlgBtn.mbYes
替换为自定义字符串?这是一个很好的解决方案,但在处理非英语应用程序时失败。@Holmes:mb*和mr*值都是常量ID号,而不是字符串。这段代码中没有任何内容依赖于字符串本地化,因此它应该在所有平台和配置上都能正常工作。那么,如果需要在本地语言中设置“是”和“否”,您会怎么做?i、 e.申言“是”-“不”。我们能做些什么吗?@Holmes:这就是资源字符串的用途。将代码更改为将自定义
resourcestring
值传递到
ShowMessage()
,然后可以根据需要本地化
resourcestring
值。这与
MessageDlg
对话框本身无关(该对话框已经在其UI内部使用了本地化的资源字符串)。@peimanF。它根本不是模态的。它是异步的,只需正常显示表单窗口,然后在窗口关闭时调用匿名过程。
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;