高分悬赏,关于MDI,DLL,工具栏合并的资源释放问题(100分)

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

lzjnuaa

Unregistered / Unconfirmed
GUEST, unregistred user!
关于MDI,DLL,工具栏合并的资源释放问题

我在MDIForm中通过
TshowForm = procedure (post_Application:TApplication;ParentScreen:TScreen;user_id:Integer;ToolButtonParent:TWinControl);stdcall;
调用dll(MDIChild);

在dll中
procedure DLLUnloadProc(Reason:DWord);
begin
if Reason=0 then begin
Application:=DllApplication;
Screen:=DllScreen;
end;
end;

procedure showForm(get_Application:TApplication;ParentScreen:TScreen;get_user_id:Integer;get_toolbuttonparent:TWinControl);stdcall;
begin
Application:=get_Application;
Screen:=ParentScreen;
frmAdClientManager:=TfrmAdClientManager.Create(nil);
frmAdClientManager.ToolButtonParent:=get_toolbuttonparent;
frmAdClientManager.FormStyle:=fsMDIChild;
frmAdClientManager.WindowState:=wsMaximized;
end;

exports
showForm;
begin
DllApplication:=Application;
DllScreen:=Screen;
DLLProc:=@DLLUnloadProc;
end.

在frmAdClientManager中动态创建一个AddToolButton,并合并到MDIForm中的工具栏上。
AddToolButton:=TToolButton.Create(self);
AddToolButton.Parent:=self.ToolButtonParent; //AddToolButton的Parent为MDIForm(主控)上的工具栏
AddToolButton.Show;

在该frmAdClientManager的close中 action:=caFree;

现在的问题就是,我在MDIForm中触发一Message来关闭frmAdClientManager,因为frmAdClientManager的close是
action:=caFree;所以把AddToolButton给释放了,按理说在MDIForm上的工具栏中的AddToolButton的指针应该被清除
(因为组件在释放的时候会通知其Parent,并将Parent上的其的指针清除),
但现在问题就是我把MDIChild关闭之后,在MDIForm上的工具栏中该指针还存在,导致报错。
 
加一个AddToolButton := nil;
 
关键是我在MDIForm中根本就控制不了AddToolButton,也不想在MDIForm中控制,因为AddToolButton是应该由MDIChild来管理的
 
你这个其实就是如何通过一个TOOLBUTTON来控制MDICHILD,就比如打印按扭或预览按扭。
我实现的方法是:
1、在MDIForm中初始化TOOLBUTTON.ACTION:=NIL
2、在每一个MDIChild.OnActivate事件中定义TOOLBUTTON.ACTION:=你的Action
3、在每一个MDIChild.OnDeActivate事件中定义TOOLBUTTON.ACTION:=NIL
 
可能是我没表达清楚吧

主要就是实现如下功能:
有个主控(MDIForm),只是个框架,有工具栏,上面已经有一些ToolButton,对应该系统的子模块,例如:系统管理等,系统管理现在是个子模块(MDIChild),是个单独的dll,不过其中也有工具栏,比如增加,删除,修改什么的,现在我就是要在MDIForm上的工具栏上点击“系统管理”按扭时,调用系统管理对应的dll(MDIChild),同时MDIForm和MDIChild上的工具栏合并,在关闭该MDIChild时候,出现了主控MDIForm上工具栏上还存在刚才MDIChild生成的ToolButton对应的指针。并没释放
 
大家帮忙啊,分数可加啊
 
还发现一怪异情况,好象跟选中project->Options->package中Builde with runtime有关,但如把该选项去掉,则会出现另错误‘cannot assign a TFont to a TFont’
 
高手呢?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
662
import
I
后退
顶部