菜鸟的问题-关于FREE方法的使用~!(50分)

  • 主题发起人 主题发起人 nofuture
  • 开始时间 开始时间
N

nofuture

Unregistered / Unconfirmed
GUEST, unregistred user!
看了好多程序,不明白什么时候要用这个FREE
为什么一动态创建窗体就要把这个窗体FREE了呢?不是还在用吗?怎么就释放内存了?
我的理解是不用的时候采用FREE,比如把这个窗体关掉,然后使用FREE.~!
例子:
procedure Tlogin_Frm.Action1Execute(Sender:Tobject);
begin
Application.Create(Tmain_Frm,mail_Frm);
main_Frm.ShowModal;
main_Frm.free;
end;
 
在SHOWMODAL后,当这个窗体一关闭,马上就执行FREE语句.
 
建议楼主去把SHOWMODAL这个方法好好看看。
 
楼主可以在main_Frm.free;这个位置设个断点
看看是不是窗体关闭了才执行main_Frm.free;

其实ShowModal 就是对Show一个再处理
其中这段代码
try
Show

try
SendMessage(Handle, CM_ACTIVATE, 0, 0);
ModalResult := 0;
repeat
Application.HandleMessage;
if Application.FTerminate then ModalResult := mrCancel else
if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
.............

可以看出ShowModal 其实就是先Show操作 然后等待这个窗体的返回值 ModalResult

当然这里还有一些其他的控制 楼主有时间好好看看
 
如果此处用DESTORY会发生什么情况呢?
 
看 free的源码

procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;

Free其实就是Destroy 只不过有安全控制罢了
何况楼主最好不要直接用Destroy
 
showmodal本身的结束是在窗体的onclosequery之后的。换句话说,直到窗体都关闭了,程序才会走到showmodal的下一句。
 
请教Avalon,如何查看system中方法的源码?
在帮助里吗?
 
很简单 按住Ctrl 然后用鼠标点击方法即可
 
接受答案了.
 
后退
顶部