Form的数量是否有限制?(100分)

  • 主题发起人 主题发起人 eastweast
  • 开始时间 开始时间
E

eastweast

Unregistered / Unconfirmed
GUEST, unregistred user!
问一个有点傻的问题,在Delphi的一个Project中,Form的数量有没有限制。
我的一个程序中用到了大概60多个Form,在IDE中运行时,运行到第50几个
createform(...)时,会出现如下错误提示:
Project xxxx.exe raised exception class EOutofResource with message
'参数错误’。
但编译完后运行就没有问题了。不知为何?
不知道是delphi的问题,还是我在form的OnCreate事件中写的程序有问题?
另外请教一下,在一个程序中使用Form太多,是不是很占用系统资源,如何
避免?[blue][/blue]
 
你应该在程序运行时动态创建你所用到的窗体,用完后则释放
 
同意楼上的,到用的时候再创建,不然那儿有那么大的内存让你一个人用?
不可能的啊,所以要动态创建!
 
应该不会又限制吧,在每个窗口oncloses事件中,action := cafree掉吧,若同时打开很多的
窗口,内存 ?
 
如果能够CREAT然后FREE,而且同一时间一般就使用1个,那么可以CREAT和FREE共N个。
 
那怎样动态创建?请指教!
 
就像定义变量一样
 
Form1 := TForm1.Create(self);
Form1.ShowModel;
Form1.Free;
 
使用动态创建的方式可以使程序运行时段占用的资源尽可能地少。
而你的情况除此之外还要这样做:
因为你在设计时段所有窗体都是打开的,结果delphi在设计时段占用了系统很多资源.
你只要选择相应的form单元然后在代码编辑页上的鼠标右键菜单中选择Close Page,关闭
暂时不需要写代码的窗体.
应该养成只打开当前编辑窗体的习惯。如果一个程序有百多个窗体,象你这样,这百多个
窗体都打开了,delphi占用的资源是很可怕的.
 
procedure ShowR60cjmxb;
begin
with TfrmR60cjmxb.Create(Application) do begin
try
showmodal;
finally
free;
end;
end;
end;

在别的地方引用这个单元。。然后直接写过程名就行啦
 
用的时候创建,不用的时候释放掉,多少都没问题
 
给你一个例子:
//工程文件
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {frmMain},
Unit2 in 'Unit2.pas' {frmChild};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
// Application.CreateForm(TfrmChild, frmChild);
Application.Run;
end.
//=================================================================
//主窗体
uses Unit2;

{$R *.dfm}

procedure TfrmMain.BitBtn1Click(Sender: TObject);
var
frm : TfrmChild;
begin
frm := TfrmChild.Create(self);
frm.ShowModal;
frm.Release;
end;

//==========================================================
//子窗体
//var
// frmChild: TfrmChild;
 
动态创建Form是正确的思路.
但你的问题可以是你的程序在Win9X中运行,即使你有很多内存,它都只能用到64M,所以
打开一定数目的Form后,就会不够资源.
另外一个原因可能是你在只有64M的机器上运行WinNT或Win2K.
 
那不是Delphi的问题,那是Windows的问题。
当出现这种情况时,你检察一下系统资源,保证没有资源了。
 
接受答案
 
后退
顶部