Delphi XE5 Anonymous ShowModal没有按预期工作

时间:2014-10-14 03:35:40

标签: android delphi firemonkey delphi-xe5

我是Delphi XE5的新手,目前正在使用Delphi XE5在我的Windows桌面上开发Android平台应用程序。 我有两种形式(Form1和Form2),并尝试按照Marco的RAD博客(http://blog.marcocantu.com/blog/xe5_anonymous_showmodal_android.html)中显示的方式在Form1上以模态方式显示Form2。

但结果并不像预期的那样。

procedure TForm1.Button1Click(Sender: TObject);
var
  frm2: TForm2;
begin
  frm2 := TForm2.Create(nil);

  ShowMessage('before frm2.ShowModal...');
  frm2.ShowModal (
    procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
        if frm2.ListBox1.ItemIndex >= 0 then
          edit1.Text := frm2.ListBox1.Items [frm2.ListBox1.ItemIndex];
      frm2.DisposeOf;
    end
  );
  ShowMessage('after frm2.ShowModal...');
end;

我写了上面的代码并在Android设备上运行该应用程序。 我点击了Button1,然后我得到了消息框“在frm2.ShowModal ...之前”,接下来是“在frm2.ShowModal ...之后”,然后显示了Form2。

我希望订单应该是1)“在frm2.ShowModal ...之前”消息,2)Form2正在显示,3)“在frm2.ShowModal ...之后”消息。

我怎么了?

1 个答案:

答案 0 :(得分:3)

对匿名ShowModal的调用未阻止,这意味着ShowModal之后的所有代码都将首先执行。

这里有一点注意。调用frm2.DisposeOf是错误的。 你必须使用这种模式:

声明

procedure TFrm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;

http://www.malcolmgroves.com/blog/?p=1585。 文档已在XE7中更正,Using FireMonkey Modal Dialog Boxes,但此模式可用于所有Delphi版本。


结论:如果要在关闭模式对话框后执行代码,请将该代码放在匿名方法中。