小问题。 用self创建的Form是私有的,在关闭的时候是资源释放的;用application创建的Form是不释放的,只有在应用程序关闭的时候才释放。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.delphibbs.com/delphibbs/dispq.asp?lid=834435http://www.delphibbs.com/delphibbs/dispq.asp?lid=791383http://www.delphibbs.com/delphibbs/dispq.asp?lid=1133232问题:请问Application、Self和nil有什么区别? ( 积分:45, 回复:7, 阅读:52 )分类:控件 - 使用 ( 版主:amo, cAkk ) 来自:11830, 时间:2002-5-30 15:15:00, ID:1133232 [显示:小字体 | 大字体] 请问我在动态建立控件时使用的Application、Self和nil有什么区别TempAQ_GetAllSum:=TADOQuery.Create(Application);或TempAQ_GetAllSum:=TADOQuery.Create(Self);或TempAQ_GetAllSum:=TADOQuery.Create(nil); 来自:Alex_Y, 时间:2002-5-30 15:24:00, ID:1133255 我是这么理解的( 不一定说的对 ):Application 是应用程序的属性意为在应用中创建ADOQUERY对象Self 很简单,就是创建自己nil 为空?这样也可以吗?没试过 来自:LGXing, 时间:2002-5-30 15:31:00, ID:1133275 我是这么理解的( 不一定说的对 ):Application 属于此应用程序的对象Self 属于当前窗体nil 自成一体 来自:11830, 时间:2002-5-30 15:34:00, ID:1133288 谢谢你们的回复!哪它们在使用上有什么区别呢?我现在也不清到底用哪个好,有时用application,有时用nil。请问您们都怎么用这个? 来自:Archerfl, 时间:2002-5-30 16:28:00, ID:1133377 TADOQuery.Create(AOwner: TComponent);是对其祖先类TComponent的构造器的覆盖。其中AOwner是指你所创建的对象的拥有者。如本例,假如是Application,那么此时拥有者为整个应用程序对象Application。同理self则拥有者为当前窗体对象,nil则不存在拥有者。其实,你在写代码时这几种方式都可以,区别仅在与:当你用Application做拥有者时,那么该对象假如你不是用Free方法手动释放内存的,那么就要等到Application对象被释放时,它才会一起被释放;而你用self时,则要等到该窗体对象释放时,它才一起被释放;nil,则它要等到整个应用程序被释放时,它才会被释放。不过,你应尽可能养成不用时释放对象的习灌,以防出现内存泄漏! 来自:Anubis99, 时间:2002-5-30 16:40:00, ID:1133411 Archerfl说的很正确 来自:11830, 时间:2002-5-31 8:45:00, ID:1134395 接受答案了. 来自:11830, 时间:2002-5-31 8:50:00, ID:1134409 好像明白了,谢谢! 来自:archy, 时间:2001-12-16 1:14:00, ID:791383 [显示:小字体 | 大字体] 动态创建一个窗口时form1:=Tform1.create(Application)form1:=Tform1.create(nil);和form1:=Tform1.create(self)有何区别?似乎一样的吗 来自:乌龙茶, 时间:2001-12-16 1:19:00, ID:791384 用application 作为参数,则由application负责释放当前窗体如果用self则由当前类负责释放如果用nil则由你自己负责释放,否则将会造成内存泄漏 来自:QY208, 时间:2001-12-16 2:22:00, ID:791424 同意楼上 来自:barton, 时间:2001-12-16 5:13:00, ID:791438 不完全正确.1.使用Application作为参数时的确可以由Application来释放.但你不能依赖Application去释放.因为只有Application释放的时候才会去释放没有被释放的类.可是你能等到那个时候吗?你能容忍一个没有用处的类占用宝贵的资源吗?所以常常是即用即撤.不过可以保证没有内存泄漏是真的.2.nil参数建立窗体时必须主动释放.在动态建立DLL中的窗体时,使用Application常常出错.这时候只能用nil作为参数,或者用Application.Handle作为参数,以保证在同一个消息体系中.3.使用Self作为参数几乎是错误的.一是,这种用法只能在粝方法中处理,如何这个类不是个窗体容器的话,毫无意义.至少如果这个Self如果是个TForm的话,难保不出错. 来自:zouming, 时间:2001-12-16 9:11:00, ID:791455 agree to barton 来自:archy, 时间:2001-12-22 14:37:00, ID:804407 to barton:非常感谢,但是我的《Mastering Delphi 5》中说动态建立MDIchild时是frmChild:=TfrmChild.create(self);不知您认为如何 来自:树熊132, 时间:2002-1-4 15:25:00, ID:834435 [显示:小字体 | 大字体] 谁能告诉我form.create(self)与form.create(nil)的区别 来自:jiangxiancheng, 时间:2002-1-4 15:37:00, ID:834468 所有者不一样。 来自:taozhiyu, 时间:2002-1-4 15:41:00, ID:834478 AOwner is the owner of the TCustomForm object. 来自:wonsfon, 时间:2002-1-4 16:28:00, ID:834592 xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放xx.create(nil)之后,你在程序结束时必须手工释放xx 来自:lujr, 时间:2002-1-4 16:32:00, ID:834600 WONSTON的说法是对的。xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放xx.create(nil)之后,你在程序结束时必须手工释放xx 来自:yhaochuan, 时间:2002-1-4 16:48:00, ID:834643 wonsfon说得对,如果你在一个FORM中动态建立另一个FORM2,那么建议用procedure form1.button1.click(sender:tobject);begin if form2 = nil then form2 := tform2.create(self); form2.showmodal;end; 很好,顺便展开一个问题,请指教:Owner和Parent属性都和内存管理有关,那么它们之间在这方面存在存在哪些区别?谢谢! 下面语句如何写得精简写? 字符串问题 一个客户管理系统,很小 为什么插入数据库的图片只能是bmp格式不能是jpg格式的呢? 谁知道ActiveX From为什么会这样? 获取CPU使用率的时候遇到一个问题 VideoCap与数据库的问题,请高手解答。急用 如何使用ado调用文本文件,并且根据空格和特殊字符,分割字段 怎样判断文件是否存在????? 有关指针的问题??? 请问在delphi中如何将表中重复记录删除??? 各位大虾,请问用ADO怎么样连接操作ACCESS数据?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=791383
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1133232问题:请问Application、Self和nil有什么区别? ( 积分:45, 回复:7, 阅读:52 )
分类:控件 - 使用 ( 版主:amo, cAkk )
来自:11830, 时间:2002-5-30 15:15:00, ID:1133232 [显示:小字体 | 大字体]
请问我在动态建立控件时使用的Application、Self和nil有什么区别
TempAQ_GetAllSum:=TADOQuery.Create(Application);
或
TempAQ_GetAllSum:=TADOQuery.Create(Self);
或
TempAQ_GetAllSum:=TADOQuery.Create(nil);
来自:Alex_Y, 时间:2002-5-30 15:24:00, ID:1133255
我是这么理解的( 不一定说的对 ):
Application 是应用程序的属性意为在应用中创建ADOQUERY对象
Self 很简单,就是创建自己
nil 为空?这样也可以吗?没试过
来自:LGXing, 时间:2002-5-30 15:31:00, ID:1133275
我是这么理解的( 不一定说的对 ):
Application 属于此应用程序的对象
Self 属于当前窗体
nil 自成一体
来自:11830, 时间:2002-5-30 15:34:00, ID:1133288
谢谢你们的回复!
哪它们在使用上有什么区别呢?
我现在也不清到底用哪个好,有时用application,有时用nil。
请问您们都怎么用这个?
来自:Archerfl, 时间:2002-5-30 16:28:00, ID:1133377
TADOQuery.Create(AOwner: TComponent);是对其祖先类TComponent的构造器的覆盖。
其中AOwner是指你所创建的对象的拥有者。如本例,假如是Application,那么此时拥有者
为整个应用程序对象Application。同理self则拥有者为当前窗体对象,nil则不存在拥有者。
其实,你在写代码时这几种方式都可以,区别仅在与:当你用Application做拥有者时,那么
该对象假如你不是用Free方法手动释放内存的,那么就要等到Application对象被释放时,它
才会一起被释放;而你用self时,则要等到该窗体对象释放时,它才一起被释放;nil,则它
要等到整个应用程序被释放时,它才会被释放。
不过,你应尽可能养成不用时释放对象的习灌,以防出现内存泄漏!
来自:Anubis99, 时间:2002-5-30 16:40:00, ID:1133411
Archerfl说的很正确
来自:11830, 时间:2002-5-31 8:45:00, ID:1134395
接受答案了.
来自:11830, 时间:2002-5-31 8:50:00, ID:1134409
好像明白了,谢谢!
来自:archy, 时间:2001-12-16 1:14:00, ID:791383 [显示:小字体 | 大字体]
动态创建一个窗口时form1:=Tform1.create(Application)
form1:=Tform1.create(nil);和
form1:=Tform1.create(self)有何区别?似乎一样的吗
来自:乌龙茶, 时间:2001-12-16 1:19:00, ID:791384
用application 作为参数,则由application负责释放当前窗体
如果用self则由当前类负责释放
如果用nil则由你自己负责释放,否则将会造成内存泄漏
来自:QY208, 时间:2001-12-16 2:22:00, ID:791424
同意楼上
来自:barton, 时间:2001-12-16 5:13:00, ID:791438
不完全正确.
1.使用Application作为参数时的确可以由Application来释放.但你不能依赖Application
去释放.因为只有Application释放的时候才会去释放没有被释放的类.可是你能等到那个时
候吗?你能容忍一个没有用处的类占用宝贵的资源吗?所以常常是即用即撤.不过可以保证没
有内存泄漏是真的.
2.nil参数建立窗体时必须主动释放.在动态建立DLL中的窗体时,使用Application常常出错.
这时候只能用nil作为参数,或者用Application.Handle作为参数,以保证在同一个消息体系
中.
3.使用Self作为参数几乎是错误的.一是,这种用法只能在粝方法中处理,如何这个类不是个
窗体容器的话,毫无意义.至少如果这个Self如果是个TForm的话,难保不出错.
来自:zouming, 时间:2001-12-16 9:11:00, ID:791455
agree to barton
来自:archy, 时间:2001-12-22 14:37:00, ID:804407
to barton:
非常感谢,但是我的《Mastering Delphi 5》中说
动态建立MDIchild时是frmChild:=TfrmChild.create(self);不知您认为如何
来自:树熊132, 时间:2002-1-4 15:25:00, ID:834435 [显示:小字体 | 大字体]
谁能告诉我form.create(self)与form.create(nil)的区别
来自:jiangxiancheng, 时间:2002-1-4 15:37:00, ID:834468
所有者不一样。
来自:taozhiyu, 时间:2002-1-4 15:41:00, ID:834478
AOwner is the owner of the TCustomForm object.
来自:wonsfon, 时间:2002-1-4 16:28:00, ID:834592
xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放
xx.create(nil)之后,你在程序结束时必须手工释放xx
来自:lujr, 时间:2002-1-4 16:32:00, ID:834600
WONSTON的说法是对的。
xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放
xx.create(nil)之后,你在程序结束时必须手工释放xx
来自:yhaochuan, 时间:2002-1-4 16:48:00, ID:834643
wonsfon说得对,
如果你在一个FORM中动态建立另一个FORM2,那么建议用procedure form1.button1.click(sender:tobject);
begin
if form2 = nil then
form2 := tform2.create(self);
form2.showmodal;
end;
很好,顺便展开一个问题,请指教:Owner和Parent属性都和内存管理有关,那么它们之间在这方面存在存在哪些区别?谢谢!