在Delphi XE7中第二次在Android上打开表单时发生访问冲突

在Delphi XE7中第二次在Android上打开表单时发生访问冲突,第1张

概述当我第一次打开表单时,没有任何违反,但是当我第一次选择一个TEdit字段,然后关闭该表单,然后重新创建该表单并打开它时,我得到了违规.创建表单的代码:procedureTfrmNocoreDKS.actConfigExecute(Sender:TObject);varconfForm:TConfiguratie;beginconfForm:=TConfigura

当我第一次打开表单时,没有任何违反,但是当我第一次选择一个TEdit字段,然后关闭该表单,然后重新创建该表单并打开它时,我得到了违规.

创建表单的代码:

procedure TfrmNocoreDKS.actConfigExecute(Sender: TObject);var  confForm: TConfiguratIE;begin  confForm := TConfiguratIE.Create(nil);  confForm.ShowModal(    procedure(ModalResult: TModalResult)    begin      confForm.dispoSEOf;//Also trIEd confForm.Free;    end);end;

我也尝试过创建表单:

procedure TfrmNocoreDKS.actConfigExecute(Sender: TObject);var  confForm: TConfiguratIE;begin  confForm := TConfiguratIE.Create(nil);  try    confForm.ShowModal(      procedure(ModalResult: TModalResult)      begin      end);  finally    confForm.free;  end;end;

关闭表单的代码:

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

因为只有当您单击任何TEdit然后关闭表单时才会出现违规,所以我认为它与虚拟键盘有关,但我不确定.我没有使用虚拟键盘本身的任何方法.

解决方法:

更新资料

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

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

如何处理模式对话框的文档已更改:Using FireMonkey Modal Dialog Boxes.

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平台上无法正常工作:

RSP-9692 Runtime creation of forms in Android

RSP-9665 Access Violation in FMX.Platform.Android SendCMGestureMessage.

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

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

也有QC-126524 [Android] Open/Close/Free sub form multiple times may cause crash on Android Platform when removing Focus from TEdit报告相同的内容,并已在XE7中解决.这显然是不正确的.

总结

以上是内存溢出为你收集整理的在Delphi XE7中第二次在Android上打开表单时发生访问冲突全部内容,希望文章能够帮你解决在Delphi XE7中第二次在Android上打开表单时发生访问冲突所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1211575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存