Delphi-XE5 Android开发。免费非莫代尔表格的最佳方式是什么?
-
21-12-2019 - |
题
在Delphi for Windows中,免费(form.free)封闭的辅助动态创建表单没有问题,因为它在哪里是“showmodal”方法。但是Android的Delphi不支持form.showmodal,我们必须使用show方法。但我想到了当我关闭(form.Close)辅助表单时,它仍然是内存甚至运行代码onresize事件(???)。在非模态呼叫中免费表格的最佳方式是什么?
在另一个单词中:如何在该表单上关闭从onclick事件处理程序的表单,并确保表单的析构函数运行?解决方案
更新
见下面的重要说明。
在XE5 for Android中有可能显示一种具有模态结果的表单,使用匿名方法是过载的世代odicetagcode过程:
程序showmodal(const结果proc:tproc);过载;
您可以在本文中找到Marco Cantu, ShowModal
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);
.
注意, Delphi XE5 Anonymous ShowModal and Android
将强制待销毁的表单,覆盖电弧自动处理。
您还可以在文档中找到一个描述, dlg.DisposeOf;
在这里, Using Modal Dialog Boxes in Mobile Apps
如其他人发现, http://www.malcolmgroves.com/blog/?p= 1585 ,匿名方法中调用的ShowModal Dialogs in FireMonkey Mobile Apps
是错误的,因为匿名帧必须能够从有效对象处理ModalResult。使用此模式而不是释放模态对话框释放您的模态对话框
.procedure TModalForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.caFree;
end;
其他提示
别忘了在objectinspector中设置
ModalResult = mrOK
.
或在您的
中procedure TForm1.ExitButtonClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
.
用于上面的示例dlg.showmodal!