gpt4 book ai didi

android - Delphi-XE5 安卓开发。释放非模态形式的最佳方法是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 08:54:30 25 4
gpt4 key购买 nike

在 Delphi for windows 中,Free (Form.free) 关闭二次动态创建的表单没有问题,因为“ShowModal”方法在哪里。但是Delphi for Android 不支持Form.ShowModal,我们必须使用Show 方法。但是我想通了,当我关闭 (Form.close) 二级表单时,它仍然在内存中,甚至运行代码 Onresize 事件 (???)。在非模态调用中实现自由形式的最佳方式是什么?

换句话说:如何从该表单上的 OnClick 事件处理程序关闭该表单,并确保该表单的析构函数运行?

最佳答案

更新

请参阅下面的重要说明。


在 XE5 for Android 中,有可能显示带有模态结果的表单,这是一个使用匿名方法的重载 ShowModal 过程:

procedure ShowModal(const ResultProc: TProc); overload;

您可以在 Marco Cantu 的这篇文章中找到它,Delphi XE5 Anonymous ShowModal and Android .

下面是如何使用这个程序的例子:

var
dlg: TForm1;
begin
dlg := TForm1.Create(nil);
// select current value, if avaialble in the list
dlg.ListBox1.ItemIndex := dlg.ListBox1.Items.IndexOf(Edit1.Text);
dlg.ShowModal(
procedure(ModalResult: TModalResult)
begin
if ModalResult = mrOK then
// if OK was pressed and an item is selected, pick it
if dlg.ListBox1.ItemIndex >= 0 then
edit1.Text := dlg.ListBox1.Items [dlg.ListBox1.ItemIndex];
dlg.DisposeOf; // Wrong !!!, see note below
end);

请注意,dlg.DisposeOf; 将强制销毁表单,覆盖 ARC 自动处理。

您还可以在文档中找到描述,Using Modal Dialog Boxes in Mobile Apps在这里,ShowModal Dialogs in FireMonkey Mobile Apps .


正如其他人所发现的,http://www.malcolmgroves.com/blog/?p=1585 , 在匿名方法中调用 DisposeOf 是错误的,因为匿名框架必须能够处理来自有效对象的 ModalResult。使用此模式来释放模态对话框,Freeing Your Modal Dialog Box .

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

关于android - Delphi-XE5 安卓开发。释放非模态形式的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com