在 Windows 底下,我们通常采用很多个 Form 来把复杂的界面元素,按功能划分,放到不同的 Form 上来显示。需要新的界面时,就来一个 Form2.Show 就可以了。
在 APP 底下,手机的资源比较有限,太多的 Form 会让手机受不了。因此,很多 FireMonkey 的开发建议里面,建议尽量少用 Form,多用 Frame。因为 Form 占用的资源比较多。
但是,在很多界面需要来回切换到情况下,如果是基于 HTML5 浏览器编程来做界面,很简单,就是刷新页面。如果是基于 Delphi FireMonkey 框架来做界面,用 Form 比用 Frame 在很多时候更简单。比如,Form2.Show 就显示了新的界面。Form2.Close 就关闭了这个界面,老的界面就自动显示出来。不需要我们自己去管理界面的层叠关系。如果用 Frame 就需要自己写代码去管理几个 Frame 之间的层叠关系,有点麻烦。
那么,用多了 Form 就带来一个问题:资源不足。
这里有几个小技巧:
1. 在 Delphi 的设计期,New 一个 FireMonkey 的 Form 后,该 Form 会被自动加入到工程文件里面去,在工程文件里面增加一行代码:Form2 := Application.CreateForm(TForm2); 如果你的程序里面有很多的 Form,在程序启动时,光是运行这一大堆的创建 Form 的代码,就会让程序启动时间变得很长,让用户无法忍受。因此,这里必须把工程文件里的一大堆类似代码注释掉,只留下创建主 Form 的代码。
2. 用户点击量某个按钮,需要显示新的界面时,比如需要显示 Form2,动态创建它的实例:
if not Assigned(Form2) then Form2 := TForm2.Create(Application);
3. 在 Form2 里面,通常我们会增加一个返回按钮(如果是安卓 APP,通常是在屏幕的顶部的左上角,有个指向左边的箭头按钮),点下这个按钮就是关闭当前这个 Form2,显示之前的 Form。这里,我们最好在关闭 Form2 的时候,将它释放掉。这样避免APP使用时间长了,创建了一大堆 Form 实例,占用很多资源。要将它释放掉,这里需要做两步:
3.1. 在 Form2.OnClose 事件里面,增加代码:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.caFree;
end;3.2. 在 Form2.OnDestroy 事件里面,增加代码:
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
本文探讨了在Delphi FireMonkey框架中优化界面资源的方法,包括合理使用Form和Frame、动态创建Form实例以及释放Form资源等技巧。

被折叠的 条评论
为什么被折叠?



