问关于窗体的释放 我也注意过这个问题,好象它会保留在内存里,不过再创建后释放,新创建的是被释放了,我也不明白,不过我猜窗体为nil值不见得是窗体释放的评价标准 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关于窗体的释放:Close()方法是将窗体隐藏,即form.hide;释放窗体或是控件的标准用法是Form.Free,其实Free方法只是调用了Destroy()方法,在窗体不为nil时进行资源的释放,但并不将窗体实例置为nil,只有窗体实例没有创始化之前值才为nil,否则你要显示的将窗体实例置为nil.释放窗体的标准用法是:1、对于模态窗体Form1 := TForm.Create(Self);try your process Form1.ShowModal;finally Form1.Free;end;//可以确保资源的释放,而不会重复创建窗体实例。2、对于非模态窗体if not Assigned(Form1) then//窗体实例为nil;begin Form1 := TForm1.Create(Self); Form1.Show;end;注意要在窗体的OnClose和OnDestroy事件中分别写入事件处理代码。OnClose:Action := caFree;OnDestroy:Form1 := nil;//这样确保form1在释放后置为nil值,不会重复创建窗体实例. 高手!模态窗体?非模态窗体非模态窗体是指dll,datamodule这些吗?对于这个我不是很清楚.... 看看 system.pas :procedure TObject.Free;begin if Self <> nil then Destroy;end; 模态窗体是以独占方式打开的窗体,你可以试一下,当你Showmodal打开一个窗体时,其他窗体都不再响应非模态窗体,则相反 一般情况下,你只需要调用FREE,FREE是安全的做法.虽然现在FREE只判断了指针是否为NIL,当以后可能会有改进,为了便于代码的移植,你应该使用FREE我通常这样form1.free;form1:=nil;来释放,我发现只FREE,指针不是为nil,再次创建时会出错,所以用第二句话来将其强制设置为NIL. 我看见很多时候又有大虾把问题所在的pas单元引用了出来我搜索到system.pas在dephi5\source的Rtl文件夹里请问在碰到相关问题时怎么样去查找相关的pas单元,怎么样在其中找到我想要的相关问题,我搜索到system.pas在dephi5\source的Rtl文件夹里谢谢,请授我以渔!而不是单纯的鱼。 在Code Explorer 中你只要把鼠标指向相关过程或函数,就会显示其所在。PAS单元和行号,然后用VIEW——borwse打开相应单元就行了。 哦,我看到的怎么是一些汇编代码ILikeTomato(我爱吃番茄)看到的怎么是一些pascal代码? 在用 Use Debug DCUs 选项跟踪调试程序时,务必谨慎使用 Step Over 和 Trace Into ,只用 Trace Into 会跟踪得晕头转向。另,如果只是看看源码,建议用 yang6130(月明@沧海)说的的方法。 nil是可以作为判断窗体释放的评价标准的,不过在释放窗体的时候采用FreeAndNil(form1)的办法或from1.free;form1 :=nil。其中的原因是form1是个指向窗体的指针,调用free释放窗体时,系统只是把form1指向的内存释放了,而指针还是指向内存地址的,没有归零,所以必须归零(from1:=ni),才能用来作为判断的标准。 我是用 yang6130(月明@沧海) 的方法啊,看到form.free都是看到的汇编代码................ DELPHI什么控件可以显示邮件的正文和附件? 请教一个控件重绘的问题 乱码问题求助sos OCX开发,急!急!急! .bpl文件间如何共享些资源? 如何畫斜線? 数据更新和查询 高分求DbGrid问题 怎样去改变Coolbar的长度!?? fastReport怎么让图片的FileLink指向一个变量呢 我用API函数ftpgetfile下载文件,如何显示下载进度和其它状态---急待 请问html页面里的form表单传递的数据内容有哪些?????
释放窗体或是控件的标准用法是Form.Free,其实Free方法只是调用了Destroy()方法,在窗体不为nil时进行资源的释放,但并不将窗体实例置为nil,只有窗体实例没有创始化之前值才为nil,否则你要显示的将窗体实例置为nil.
释放窗体的标准用法是:
1、对于模态窗体
Form1 := TForm.Create(Self);
try
your process
Form1.ShowModal;
finally
Form1.Free;
end;//可以确保资源的释放,而不会重复创建窗体实例。
2、对于非模态窗体
if not Assigned(Form1) then//窗体实例为nil;
begin
Form1 := TForm1.Create(Self);
Form1.Show;
end;
注意要在窗体的OnClose和OnDestroy事件中分别写入事件处理代码。
OnClose:
Action := caFree;
OnDestroy:
Form1 := nil;
//这样确保form1在释放后置为nil值,不会重复创建窗体实例.
非模态窗体是指dll,datamodule这些吗?对于这个我不是很清楚....
begin
if Self <> nil then
Destroy;
end;
非模态窗体,则相反
我通常这样
form1.free;
form1:=nil;
来释放,我发现只FREE,指针不是为nil,再次创建时会出错,所以用第二句话来将其强制设置为NIL.
我搜索到system.pas在dephi5\source的Rtl文件夹里
请问在碰到相关问题时怎么样去查找相关的pas单元,怎么样在其中找到
我想要的相关问题,我搜索到system.pas在dephi5\source的Rtl文件夹里
谢谢,请授我以渔!而不是单纯的鱼。
ILikeTomato(我爱吃番茄)看到的怎么是一些pascal代码?
其中的原因是form1是个指向窗体的指针,调用free释放窗体时,系统只是把form1指向的内存释放了,而指针还是指向内存地址的,没有归零,所以必须归零(from1:=ni),才能用来作为判断的标准。
都是看到的汇编代码................