再问资源释放问题?

zhouboat 2002-12-30 12:31:41
请问:
form1.close;
active:=cafee;
form1.free;
有何区别?
是否form1.close;关闭窗体并不释放窗体和其上控件占用资源?
active:=cafree;既关闭窗体又释放所有资源?
active:=cafree等同form1.free;?
还有我试了一下active:=cafree;提示can't assign a read only property。
why?
再:释放了主窗体就不需释放其他窗体了吗?
虽然问题简单,但是还请有人彻底解答!
上个贴子没人回答彻底,希望这个能解吾之惑。
...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouboat 2002-12-30
  • 打赏
  • 举报
回复
假如建立有form1(主窗体)、form2两个窗体的程序;
1、是不是在form1.close后释放了所有窗体的资源呢?
2、什么是非模式窗体,什么是模式窗体?

mengxianbao1521 2002-12-30
  • 打赏
  • 举报
回复
楼上的可谓是功力强劲,
补充说明一下:
我用FreeAndNil会更好。
深宇 2002-12-30
  • 打赏
  • 举报
回复
form1.close;
如果form1是主窗口,则释放所有的资源。如果是子窗口,则要在onclose(非模式窗体)事件中加入active:=cafee;才能释放该窗口的资源,否则只是关闭窗口的显示。
form1.free;
如果是模式窗体,active:=cafee;也不能释放所占资源,这时在showmodal;后加上一行,form1.free,即可释放该窗体所占用的资源了。
blactte 2002-12-30
  • 打赏
  • 举报
回复
1、点击主窗体的叉叉将主窗体关闭时(不在form1.onclose过程中加入form1.close;)是不是就释放了所有的资源呢?

不用加入FORM1.CLOSE 就可以释放所用资源!
zhouboat 2002-12-30
  • 打赏
  • 举报
回复
谢谢各位,回答的非常清楚。
但是:
1、点击主窗体的叉叉将主窗体关闭时(不在form1.onclose过程中加入form1.close;)是不是就释放了所有的资源呢?
别嫌我烦,问完我就明白了。
在线等待,立刻结贴。
zhxk32899559 2002-12-30
  • 打赏
  • 举报
回复
是action:=caFree.

假如建立有form1(主窗体)、form2两个窗体的程序;是不是在form1.close后释放了所有窗体的资源呢?

是的
zwjchina 2002-12-30
  • 打赏
  • 举报
回复
1。你的想法正确
2。模式窗口就是弹出窗口,它弹出后,这个窗口前面的窗口不能被操作。
如,拖动等等,ShowMessage函数创建的窗口就是模式窗口,我习惯叫摸态窗
口。
3。你说的active:=caFree是错的。如果一个窗口不是主窗口,在一般情况下,点击
窗口的叉叉按钮时,实际不是释放该窗口,而仅仅是隐藏了该窗口,相当与调用
了该窗口的hide方法,你在需要时还可以把它show出来。如果你在该窗口的
onclose事件中写入了代码。如下:
procedure TForm2.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
Action := caFree;
end;
那么在点该窗口的叉叉时,该窗口就会释放。注意不是active:=cafee;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧