delphi 窗体的创建和释放
2015-08-30 11:14
766 查看
Delphi中的窗体分为模式窗体和无模式窗体。二者的区别在于,用户可以在无模式窗体和其他窗体之间切换。这样,用户就可以同时工作于一个应用程序的几个部分。Delphi中窗体的初始化有两种情况,动态创建,和自动创建。通过show显示一个无模式窗体,ShowModal显示一个模式窗体。窗体有创建对应的也要考虑释放问题。当关闭一个窗体时,窗体并没有真正从内存中释放掉,它仍然存在于内存中,除非关闭了主窗体。因为模式窗体于无模式窗体的不同,所以二者的释放处理也有不同。
用上述代码会导致每次都创建窗体实例,从而消耗了大量的内存。我们可以考虑让窗体只创建一次,同时在窗体关闭的时候将释放掉。
以上代码就是一个单例模式,确保只创建一次。当关闭窗体后,如果希望在内存中释放掉,就要处理器onClose事件,吧Action设为caFree,同时还要在onDestroy事件中将窗体变量指向nil。
模式窗体的创建与释放
因为模式窗体可以判断什么时候关闭窗体,可以用一下代码来创建和释放窗体。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写的一个上位机
- 使用SetWindowPos API函数移动窗口后,还需修改Delphi的属性值,以备下次使用,否则就会出问题(不是API不起作用,而是使用了错误的坐标值)
- Delphi调用WINAPI时到底应该是指针还是结构体(注意是Delphi变量本身就是指针)
- Delphi的字符串与16进制的相互转换函数的汇编代码
- delphi的取整函数round、trunc、ceil和floor
- Delphi判断文件是否正在被使用(CreateFile也可以只是为了读取数据,而不是创建)
- Delphi 的运算符列表,运算符及优先级表格 good
- Delphi编程中资源文件的应用
- Delphi 指针大全(光看不练是学不会的)
- delphi编程里的bool跟boolean类型有什么区别
- * Delphi编程时候诡异地出现ORA-00937错误,记录解决它的思路和方法
- python4delphi import lxml pandas 出错的小结
- Delphi 和 DFM
- win8(x64)下,重新安装delphi 2007时出现“Invalid Serial Number”,如何解决?
- delphi中文件以及线程操作基础
- [备忘]Delphi 7 编译软件申请管理员权限
- Delphi 在多线程中会应用到的读写锁-“多读一写”同步器-TMultiReadExclusiveWriteSynchronizer
- (转载)Delphi TStringList的用法
- Delphi 连接SQLserver
- Delphi 7连接MySql 5.5.15