系统资源问题(100分)

  • 主题发起人 主题发起人 rokin
  • 开始时间 开始时间
R

rokin

Unregistered / Unconfirmed
GUEST, unregistred user!
; 我曾在书看过,上面是这样说的:"一个应用程序只要主窗体是系统自动建的,其它窗体要在运行里建立"。
(即工程文件只有一行Application.CreateForm)

因为书不在手上,所以有如下问题请教:
1、这样做是什么目的;
2、如果要这样设计,其它窗体文件应该怎么建立,怎么释放。
 
好像是为了不是过多的系统的资源被已经创建但是还没有显示的窗体占用
begin
form1:=Tform1.Create(Application);
TRY
form1.ShowModal;
FINALLY
form1.free;
end;
 
1。这样做有利于资源的利用
2。先在project option里面去掉一些Form(如Form2)的auto create 选项
接着在你要建立form的语句中加入
Uses Form2;
......
......
Form2 := TForm2.create(application);
....
....
Form2.close;
 
你也可以让系统把你所有的窗体自动创建,只有在工程文件为所有窗体
加上Application.CreateForm即可或在Project/Option菜单项设一下。
不过这样做不好,因为太浪费资源了。
应该在需有的时候创建,一般
Application.CreateForm(TYourForm,YourForm);
//代码,一般用于向YourForm传递数据
YourForm.Showmodal;//Show;
YourForm.Free;
总的说来,在你的应用程序中,一个窗体从产生到死亡这个过程,只能有建立、释放各一次,
可以Show多次。但从产生到死亡的过程可以有多次。
 
1.可以节约资源和提高程序启动速度;
2.如下:
Frmr:=TFrmr.Create(Application)
try
Frmr.ShowModal;
finally
Frmr.free;
end;
 
1、创建一个FORM的实例用:
someform:=Tsomeform.create(application);
而不要用:TApplication.createform(Tform,someform);
这是因为TApplication.create()会检查mainform是否为NIL,
如果是的话便把新创建的FORM做为主FORM

2、打开一个模式FORM
modalform:=tmodalform.create(application);
try
if modalform.showmodal =mrok then
{do something}
finally
modalform.free;
end;

3、打开一个无模式FORM
打开一个无模式form的标准写法是:
someform:=Tsomeform.create(application);
someform.show;
并在form的onclose事件中将此form释放掉。
procedure tsomeformclose(sender:tobject;var action:tcloseaction);
begin
action:=cafree;
end;
4、防止出现一个form的多个实例。
if not assigned(someform) then
someform:=tsomeform.create(application);
someform.show;
并在form的onclose事件中将此form释放掉:
procedure tsomeform.formclose(sender:tobject;var action:tcloseaction);
begin
action:=cafree;
end;
同时在一个form的ondestory事件中将此form变量设为NIL
Procedure tsomeform.formdestory(sender:tobject);
begin
someform:=nil;
end;
 
多人接受答案了。
 
后退
顶部