更新资料

尽管我的建议已记录在案,但Android和多种形式仍然存在问题.请参阅本文后面的内容.

根本不要调用DisposeOf()或Free. FormClose()和caFree调用是使其工作的关键.

FireMonkey架构师现在已经为此努力了多个版本,终于可以使用了.

来自doc的示例如何创建模式对话框:

procedure MyCurrentForm.MyButtonClick(Sender: TObject);

var

dlg: TMyModalForm;

begin

// Create an instance of a form.

dlg := TMyModalForm.Create(nil);

// Configure the form. For example, give it a display name.

dlg.Caption := 'My Modal Dialog Box';

// Show your dialog box and provide an anonymous method that handles the closing of your dialog box.

dlg.ShowModal(

procedure(ModalResult: TModalResult)

begin

// Do something.

end

);

end;

并释放您的模式对话框:

procedure TMyModalForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action := TCloseAction.caFree;

end;

更新资料

OP尝试了此解决方案,但无法正常工作.

调查质量控制时,有报告声称这在移动android平台上无法正常工作:

(您必须登录才能访问它们).

后者解释了正在发生的事情.当模态形式被破坏时,FFocusedControl可能指向被破坏的控件.当ARC试图释放FFocusedControl时,这将导致分段错误. FFocusedControl必须声明为[弱].有关更多详细信息,请参见RSP-9665.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐