求救:activeForm问题!(200分)

  • 主题发起人 主题发起人 xzmyzy
  • 开始时间 开始时间
X

xzmyzy

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:1.在win2000,IE6下,先打开一个IE,不做任何操作.
   2.后再先打开一个嵌有activeForm控件的页面(ActiveFormProj11.htm).
   3.关闭ActiveFormProj11.htm后再次打开,出现"Access violation at address 00000000 in module 'activeForm.ocx
4.如果没有第1步,不先打开一个IE,就不会出现第3步提示.
5.在win2k3的IE6中不会出现任何问题.
发现如果有一个IE先打开,后面再打开有控件的页面后关闭,想删除控件,提示有一个用户在使用,即当有一个IE先打开时,activeForm.ocx控件没被关闭和释放?各位大侠,如何解决.
 
上面例子就是用向导简单做一个例子,另再加一个窗口,在activeform自动生成的窗口的create事件中增加如下代码:
procedure THqFormX.ActiveFormCreate(Sender: TObject);
begin

self.AxBorderStyle:= forms.afbNone;
Form1:= TForm1.Create(self);
Form1.BorderStyle:= bsNone;
Form1.Parent:= self;
Form1.Align:= alClient;
Form1.Show;
end;

form1为THqFormX的成员.
public
{ Public declarations }
Form1: TForm1;
procedure Initialize;
override;
 
在XP的IE上也是同样的异常现象,就象如果先开一个IE,再打开有控件的页面,就发现控件一直被占用,不会被释放?
 
怎么没人回答?
现象再说清楚些:
就是用向导建议一个TActiveForm的THqFormX,再创建另一个窗口form1,
procedure THqFormX.ActiveFormCreate(Sender: TObject);
begin

self.AxBorderStyle:= forms.afbNone;
Form1:= TForm1.Create(self);
Form1.BorderStyle:= bsNone;
Form1.Parent:= self;
Form1.Align:= alClient;
Form1.Show;
end;

//下面这事件好象都不会执行,不知道为什么?
procedure THqFormX.ActiveFormDestroy(Sender: TObject);
begin

Form1.Close;
Form1.Free;
form1:= nil;

end;

编译后生成控件,执行嵌有这控件的网页,出现form1对象有些IE中可以释放,有些不能释放,如果不能释放的话,第二次打开就出错,如何解决?
为了更显示form1有没有释放,在form1中有以下二事件:
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin

action:= caFree;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin

showmessage('form destroy');
end;
 
注意activeform对下面的事件做了影射,
procedure TTrendFormX.Initialize;
begin

inherited Initialize;
OnActivate := ActivateEvent;
OnClick := ClickEvent;
OnCreate := CreateEvent;
OnDblClick := DblClickEvent;
OnDeactivate := DeactivateEvent;
OnDestroy := DestroyEvent;
OnKeyPress := KeyPressEvent;
OnPaint := PaintEvent;
end;

如果要执行下面的代码,不防放到DestroyEvent过程里
procedure THqFormX.ActiveFormDestroy(Sender: TObject);
begin

Form1.Close;
Form1.Free;
form1:= nil;

end;


procedure THqFormX.DestroyEvent(Sender: TObject);
begin

Form1.Close;
Form1.Free;
form1:= nil;

end;
 
后退
顶部