各位大哥进来看看!一个很很菜的问题(50分)

  • 主题发起人 主题发起人 ili
  • 开始时间 开始时间
I

ili

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFormMain.Label1Click(Sender: TObject);
begin
FormAbout:=TFormAbout.Create(Application);
FormAbout.ShowModal;
end;
后在FormAbout中Close;却不能释放内存,如果Label1被按了N次,哪内存就被吃完了!
请问我该怎么办?(工程文件里的Application.CreateForm(TFormAbout, FormAbout);已经被屏蔽)
还有,像FoxMail那样“正在发送”窗体好像是单独的一个进程,可以被最小化,这个应该怎么做?
 
去掉 FormAbout:=TFormAbout.Create(Application);试试看
 
立即出错!
因为(工程文件里的Application.CreateForm(TFormAbout, FormAbout);已经被屏蔽),
必须要FormAbout:=TFormAbout.Create(Application);
 
呵呵,我知道了,要FormAbout.Close; FormAbout.Release;两个一起用。
那我的第二个问题又该怎么解决呢?
 
恭喜!!
 
1:
procedure TFormMain.Label1Click(Sender: TObject);
begin
with TFormAbout.Create(Application) do
begin
ShowModal;
Free;
end;
end;
2:重载这个窗体的CreateParams,修改Params.Owner为Desktop就可以了,回答过很多次。
 
procedure tformmain.lable1click(sender :object);
begin
...
if formabout = nil then FormAbout:=TFormAbout.Create(Application);
formabout.showmodal;
...
end;
procedure tformabout.close(....);
begin
modalresult := mrnone;
action := cafree;
formabout := nil;
end;
 
试试编个多线程,Foxmail 好像就是这么做的。
 
begin
if not Assigned(SomeForm) then
begin
Application.CreateForm(TSomeForm,SomeForm);
try
SomeForm.ShowModal;
finally
SomeForm.Free;
SomeForm := nil;
end;
end
else
SomeForm.ShowModal;
end;
 
一般是这么调用的:
FormAbout:=TFormAbout.Create(Application);
try
FormAbout.ShowModal;
finally
FormAbout.Free;
end;

保证资源被释放掉。
 
多人接受答案了。
 
后退
顶部