delphi 窗体的创建和释放
Delphi中的窗体分为模式窗体和无模式窗体。二者的区别在于,用户可以在无模式窗体和其他窗体之间切换。这样,用户就可以同时工作于一个应用程序的几个部分。Delphi中窗体的初始化有两种情况,动态创建,和自动创建。通过show显示一个无模式窗体,ShowModal显示一个模式窗体。窗体有创建对应的也要考虑释放问题。当关闭一个窗体时,窗体并没有真正从内存中释放掉,它仍然存在于内存中,除非关闭了主窗体。因为模式窗体于无模式窗体的不同,所以二者的释放处理也有不同。
模式窗体的创建与释放
因为模式窗体可以判断什么时候关闭窗体,可以用一下代码来创建和释放窗体。
begin
ModalForm := TModalForm.Create(Application);//动态创建窗体
try
ModalForm.ShowModal;//显示模式窗体
finally
ModalForm.Free; //释放窗体实例
//ShowMessage(BoolToStr(ModalForm = nil));
ModalForm := nil; //把窗体变量设为nil
//ShowMessage(BoolToStr(ModalForm = nil));
end;
end;
非模式窗体的创建与释放
begin
Form1 := TForm1.Create(Application);
Form1.show;
end;
用上述代码会导致每次都创建窗体实例,从而消耗了大量的内存。我们可以考虑让窗体只创建一次,同时在窗体关闭的时候将释放掉。
begin
if not Assigned(ModalLessForm) then //确保只创建一个窗口
begin
ModalLessForm := TModalLessForm.Create(Application);
end;
ModalLessForm.Show;
end;
以上代码就是一个单例模式,确保只创建一次。当关闭窗体后,如果希望在内存中释放掉,就要处理器onClose事件,吧Action设为caFree,同时还要在onDestroy事件中将窗体变量指向nil。
procedure TModalLessForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action := caFree; //当关闭窗口时释放窗体
end; procedure TModalLessForm.FomDestroy(Sender: TObject);
begin
ModalLessForm := nil; //在窗口销毁时,把modalLessForm变量设为nil
end;
delphi 窗体的创建和释放的更多相关文章
- Delphi窗体创建释放过程及单元文件小结(转)
Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...
- Delphi 对象的创建(create)与释放(free/destory)
Delphi 对象的创建(create)与释放(free/destory) 1.Create参数为:nil/self/application的区别,最好能看到实际效果的区别 例如: My := TMy ...
- Delphi中动态创建窗体有四种方式
Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...
- Delphi窗体研究,留个爪,以后回来研究
Delphi - 窗体创建过程 来自大富翁. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
- C# WinForm 单例模式(例:同一个窗体只创建一次实例)
//C# WinForm 单例模式(例:同一个窗体只创建一次实例) //打开窗体的事件: Form3 f = Form3.InstanceObject() ; //实例化窗体 f.Focus(); / ...
- C++中new和delete来创建和释放动态数组
在C++编程中,使用new创建数组然后用delete来释放. 一.创建并释放一维数组 #include<iostream> using namespace std; int main() ...
- delphi 窗体透明
TransparentColor:=true; TransparentColorValue:=clFuchsia; Color:= TransparentColorValue; ...
- delphi 窗体自适应屏幕分辨率
delphi 窗体自适应屏幕分辨率 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设计器,这一点让VC粉丝垂涎三尺而不可得.但是,Delphi里设计的窗体并没有自动 ...
随机推荐
- js闭包的理解-目前网上分析的最透彻文章
js的闭包对于大家实际上并不陌生,但是真正敢说自己完全理解的人并不多.笔者在网上看到分析闭包的文章非常多,篇幅用的非常多,但是实际上分析的并不到位,或者根本就是不正确的.我有时候都在想,写这些文章的人 ...
- 北京Uber优步司机奖励政策(1月18日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 【BZOJ1176】[BOI2007]Mokia 摩基亚
[BZOJ1176][BOI2007]Mokia 摩基亚 题面 bzoj 洛谷 题解 显然的\(CDQ\)\(/\)树套树题 然而根本不想写树套树,那就用\(CDQ\)吧... 考虑到点\((x1,y ...
- vim 安装
Ubuntu 16.04 下 Vim安装及配置 默认已经安装了VIM-tiny linuxidc@linuxidc:~$ locate vi | grep 'vi$' |xargs ls -al lr ...
- rn打包分析
rn打包原来是packager,后来独立出一个专门的打包工具metro,构建工具的大体思路跟前端构建工具差不多,都会有一个启动文件,然后根据模块依赖关系把对应文件找到. 开发中打包 在开发中打包,我们 ...
- hdu1176免费馅饼(动态规划,数塔)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- jmeter3.0 java请求
1.java请求说明 需要压测某些java方法或一些请求需要通过编写代码实现 1.1.依赖jar包: jmeter下/lib/ext中的ApacheJMeter_java.jar(必须).Apache ...
- Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取
-----------------------------------------------------------学无止境------------------------------------- ...
- (转)GEM -次表面散射的实时近似
次表面散射(Subsurface Scattering),简称SSS,或3S,是光射入非金属材质后在内部发生散射, 最后射出物体并进入视野中产生的现象, 即光从表面进入物体经过内部散射,然后又通过物体 ...
- 莱布尼兹三角形(C++)
[问题描述] 如下图所示的三角形,请编程输出图中排在第 n 行从左边数第 m 个位置上的数. [代码展示] # include<iostream># include<cstdio&g ...