在Delphi FireMonkey移动应用程序(Android)中关闭模态对话框

4
我正在努力研究为什么我的模态窗口无法关闭!使用的是Delphi XE-5和FireMonkey移动应用程序(Android),我遵循了此信息:在FireMonkey移动应用中显示模态对话框。为演示目的,我创建了一个新的Firemonkey Mobile Delphi应用程序并添加了一个辅助的Firemonkey Mobile表单。从主表单中,我使用了文章中的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(nil);

  Form2.ShowModal(procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
      begin
        //
      end;
      Form2.DisposeOf;
    end);

end;

在次要表单中,我将“确定”和“取消”按钮的modalresult属性分别指定为“mrCancel”和“mrOK”。然而,当模态对话框显示时,两个按钮都无法使对话框关闭。我甚至尝试添加onClick事件并通过代码分配modalresult。为什么表单不会关闭?我想我需要确保我已经做了一切正确的事情,可能是我的PHONE(设备)的问题。


问题似乎不在发布的代码中。请在其他地方查找。 - Marcus Adams
@KenWhite,我已经阅读了那篇文章,正如您所看到的,我的代码就是来自于它。在与实际使用OK或Cancel按钮关闭窗体相关的文章中,我是否遗漏了什么? - LuvRAD
@MarcusAdams 你有什么建议?我已经将编译后的APK文件发送给了我的儿子,他在Nexus设备上进行了测试,结果出现了完全相同的问题,因此问题应该出现在代码或运行时代码中。 - LuvRAD
@Marcus是正确的。如果您的模态对话框无法关闭,则不在您在此处发布的代码中。(我之前向您推荐的文章讨论了Android上模态窗口的不同之处-我相信Marco使用了“单独的活动”这个短语。)ShowModal在Windows意义上真的不是模态的。 - Ken White
@KenWhite 正如我之前所说,这也不是我的设备的问题。我已经在三星Galaxy Note III上测试过它,并将APK文件发送给了我的儿子,他在Nexus平板电脑上进行了测试。这是一个非常简单的测试演示,没有其他代码。我创建了一个主窗体(form1),其中有一个按钮,使用上面的代码。然后我创建了第二个窗体(Form2),其中有两个按钮(OK和Cancel),每个按钮的modalresult属性分别设置为“mrOK”和“mrCancel”。就是这样!没有其他代码。它已经在两个不同的Android设备上进行了测试。 - LuvRAD
显示剩余3条评论
1个回答

5
为了关闭您的模态对话框,请使用以下模式:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;

请删除您的调用Form2.DisposeOf;,因为ModalResult设置器需要操作有效的对象。

文档已在XE7中更新,请参见使用FireMonkey模态对话框

另请参见Android上的ShowModal,了解为什么DisposeOf是错误的详细信息。


使用 Delphi 10.2 Tokyo 和 Android 6.0.1,Action := TCloseAction.caFree; 防止窗体关闭... - ArieKanarie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接