系统资源释放(85分)

  • 主题发起人 主题发起人 ycxy
  • 开始时间 开始时间
Y

ycxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用动态生成Form,如
var f:TMyForm;
begin
f:=TMyForm.Create(Self);f.Show;
end;
TMyForm为StayonTop,不能为Modal
连续执行几十次,系统会死机,或提示
Windows API function falied
请问如何解决
 
如果你是只生成窗体而没有释放它们,连续执行几十次后,有可能系统资源被耗
尽,因此造成死机或VCL为生成窗体而调用的API不能成功。
你可以检查一下你的代码中是否有释放那些窗体。
缺省情况下,用窗体上的关闭按钮关闭窗体或用窗体的Close方法关闭窗体只能
使窗体隐藏而没有释放它。如果是这样的话,你必须在窗体的OnClose事件中把
Action参数设为caFree或直接调用Free释放窗体。
我想和StayOnTop没什么关系吧?
 
同意 zry 的说法 动态创建完最好把他 free 了
form1。free:
form1。close:
如果是多次用 可以先把他 隐藏 form1。hide
在用的时候 form1。show
 
var f:TMyForm;
begin

f:=TMyForm.Create(Self);
f.Show;
....
f.free;
end;
 
>Windows API function falied
是你设置form的stayontop时出的错吗?
如果是,
你可以用API:
SetWindowPos(handle,HWND_TOPMOST,0,0,0,0,
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
来代替stayontop:=true语句,
因为这条语句还改变了窗口其它一些属性。
 
释放窗体用RELEASE比FREE好
 
呵呵,当关闭Form时,用以下代码:
f.free;
f := nil;
而且,按照你的应用,Form应该是一个全局的变量,所以,释放窗口的工作是由
创建其的窗口来完成的。
另,如果为D5可以用以下代码;
freeandnil(f);
to eYes:D5里才有这个
 
大约每7个窗口消耗资源3%~5%,
 
问题是我动态创建的Form是局部变量,
在一个ButtonClick中实现,由于
是Show(Modeless),在同一个procedure
中不能用Free释放,如何解决
 
在窗口的OnClose中,
begin
Action := caFree;
MyForm := nil;
end;

创建时如下
if MyForm <> nil then
创建你的Form
 
var
f:Tmyform;
begin

f:=Tmyform.Create(Application);
try
...
finally
f.free;
end;
end;
 
多人接受答案了。
 
后退
顶部