RzPageControl多标签,使用Dll窗体释放问题

vonyao 2012-04-28 09:04:11
Dll的调用函数 ,返回类型为 TForm


function LoadUsers(AHandle:THandle; con: TADOConnection): TForm; stdcall;
var frm: TUsers;
begin
result:= nil;
Application.Handle:= AHandle;
frm:= TUsers.Create(Application);
frm.ADOQuery1.Close;
frm.ADOQuery1.Connection:= con;
frm.ADOQuery1.Open;
result:= frm;
end;




主程序新建标签加载返回的Form

procedure TMain.LoadForm(frm: TForm; Control: TRzPageControl);
var page: TRzTabsheet;
begin
page:= TRzTabsheet.Create(Control);
page.Name:= frm.Name + 'A';
page.Caption:= frm.Caption;
page.PageControl:= Control;
frm.BorderStyle:=bsNone;
Windows.SetParent(frm.Handle,page.Handle);
//frm.ParentWindow:= page.Handle;
//frm.Parent:= Page;
frm.WindowState:= wsMaximized;
try
page.Show;
frm.Show;
except
frm.Free;
end;
end;


在设置dll返回Form的parent的时候用下面这两句老少出现各种错误
//frm.ParentWindow:= page.Handle;
//frm.Parent:= Page;
现在又SetParent到时没有问题

但是关闭便签的时候
procedure TMain.RzPageControl1Close(Sender: TObject;
var AllowClose: Boolean);
begin
AllowClose:= true;
end;

Dll返回的窗体没有执行OnFormClose的Action:=caFree; self:= nil;

不设置返回Form的parent貌似也不能通过主窗体便签的
Page.Controls[i]找到dll返回的Form, Page.controlCount 为0

请教高手.怎么修改才能释放返回的Dll窗体, 怎么才能设置Form的Parent才不会报错.
...全文
204 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧