如何批量FREE 掉窗口?(0分)

  • 主题发起人 主题发起人 linbren
  • 开始时间 开始时间
L

linbren

Unregistered / Unconfirmed
GUEST, unregistred user!
听说用API可以把窗口FREE掉
怎么使用?
要求MAINFORM只包含一个窗口,如何实现?? 即CREATE 新的FORM 之前
把其他的的FORM FREE掉(注:不是MDI,是NORMAL FORM)
 
所有的窗体动态建立,用一个变量比如说
tempform:Tform;来代表建立的窗体
如果要建立别的窗体可以
if tempform<>nil then
freeandnil(tempform);
tempform:=Totherform.create(application);
这样就能保证每建立一个窗体就销毁另一个窗体
 
52free,好主意,可是我的WINDOW不是TFORM,是我一个自建窗体的子类,而我要那建的都是继承自这个TChild,而且各个WINDOW都不一样(有新的东东)。
 
我的想法是,去取应用程序内所有窗口的HANDLE,存在就干掉它,不知应该如何实现。
 
创建一个窗口句柄的列表(数组),凡不需要的就FREE掉
 
var
i,li_m: integer ;
begin
inherited;
i := screen.FormCount ;
for i := 0 to li_m-1do
begin
if screen.Forms.Name <> {yourMainForm} then
begin
screen.Forms.Free ;
end ;
end ;
end;
 
用application.Components应该也可以
 
谢谢 hcm0790。我去试试。
socid,hryyx:能不能举个具体的例子。
 
to hcm0790:
你的这段代码我试过了,好像不能通过,
screen.forms会把某些第三方控件都当成FORM free 掉的话,有点问题。
 
好久没空上来,不知问题解决了没有?
我想,用hryyx说的很方便的
for I:=0 to Application.ComponentCount-1do
begin
if (Application.Components is TForm) then
begin
// 看看是不是你不要的form
(Application.Components as TForm).Free;
end;
end;
 
以下代码实现批量FREE
TChild = class(TForm)
private
...
public
...
Procedure FormCreate(Sender : Tobject);

end;

procedure FreeChild;
Var
FormList : TList;
procedure FreeChild;
Var
i : integer;
begin
for i : = 0 to formlist.itme.count-1do
TChild(Formlist.item).free;
Formlist.clear;
formlist.free;
end;

Procedure FormCreate(Sender : Tobject);

begin
If FormList = nil then
Formlist:= Tlist.create;
Formlist.item.add(Self);
end;
 
form1 := nil;
form1.action := cafree;
 
我的FORM是普通FORM,而且每个FORM的都是自建TChildForm的子类
我认为应该是用API GET WIN HANDLE then
FREE IT ,BUT HOW TOdo

请帮忙
 
各FORM中还包含一些第三方控件,也会被当做FORM FREE 掉。。。。。。。
 
试试看。
for i:=0 to componentcount-1do
if Components.ClassParent.ClassName = 'TForm' then
TForm(Components).Close;
 
有道理,去判断父类!!
现在请哪位给出完整代码。。。。。
 
还不够完整? :P
关闭所有子窗体(非MDI)
procedure TForm.ButtonClick(Sender: TObject);
begin
for i:=0 to componentcount-1do
if Components.ClassParent.ClassName = 'TForm' then
TForm(Components).Close;

end;

>>要求MAINFORM只包含一个窗口
有个简单的方法。好像楼上也提了。
 
好!!!谢谢。可惜太穷了
 
呵呵,其实你如果只是“要求MAINFORM只包含一个窗口”
用二楼的方法就可以啦!
 
要求MAINFORM只包含一个窗口!
我的窗体类型不一样,只是同一个老爸而已,二楼的好像,只
限于同一FORM吧,有办法实现不同FORM的吗?
 
后退
顶部