0

我正在尝试将我的多设备应用程序从 Delphi 10 Seattle 升级到 Delphi 10.2 Tokyo。

只是现在我在使用 ShowModal 表单的 Android 上遇到了一些奇怪的行为。该表单确实获得了模态结果,但没有关闭显示模态表单。我怎样才能解决这个问题?

下面的代码示例:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm_Test: Tfrm_Test;
begin
  inherited;
  frm_Test := Tfrm_Test.Create(nil);
  frm_Test.ShowModal(
    procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOk then
      begin
        ShowMessage('Ok'); // This message is shown on top of the form frm_Test
      end;
    end);
end;

procedure Tfrm_Test.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShowMessage('frm_Test close'); // This message also get's shown on top of frm_test form
  Action := TCloseAction.caFree; // This does not free the form, form will stay on top of Form1
end;

我需要以不同的方式释放/关闭表单还是需要设置一些表单属性或其他东西?

更新

我已经进行了一些其他测试,现在似乎使用 TCloseAction.caFree 在 Android 上不再适用于释放表单了。

我的测试:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm_Test: Tfrm_Test;
begin
  inherited;
  frm_Test := Tfrm_Test.Create(nil);
  frm_Test.Show;
  {*
   * I've also tried using a try finally here and freeing the form inside the finally. This also did not have any effect.
   *}
end;

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

procedure Tfrm_Test.Button1Click(Sender: TObject);
begin
  Close;
end;

那么我应该如何关闭并释放 Delphi 10.2 的表单呢?奇怪的是,使用 Android 硬件后退按钮确实会关闭表单,并且还会调用 Form.Close 事件。并且使用标准的 WindowClose 操作也不起作用。

4

0 回答 0