如何将dll中的窗体嵌入到主form中的panel中?(200分)

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

Lion_sj

Unregistered / Unconfirmed
GUEST, unregistred user!
我试了一下,如何不是采用dll方式的话,能够正确嵌入。
代码如下:
if not assigned(form1) then
Application.CreateForm(Tform1,form1)

with form1 do
begin
Parent := panel;
align := alClient;
BorderStyle := bsNone;
BorderIcons := [];
Top := 0;
Left := 0;
WindowState:=wsMaximized

show
end


但是如果采用dll方式的话,发现什么反应都没有,怎么回事?代码如下:
DLLName := getDisposalDLLName;
LoadDLL(DLLName);
if not assigned(ChildForm) then begin
ChildForm:=ShowChild(Application,@FormFreeCallBack,'','','dBAlias_ND',ssdw,Userid,ScrollBox1);
end;

with ChildForm do
begin
Parent := scrollbox1;
align := alClient;
BorderStyle := bsNone;
BorderIcons := [];
Top := 0;
Left := 0;
WindowState:=wsMaximized

show
end;
 
没人回答吗
 
用Windows.SetParent WinAPI来设定窗口的父窗口
 
with ChildForm do
begin
Windows.SetParent(Handle, scrollbox1.Handle);
windows.MoveWindow(Handle, 0, 0, scrollbox1.Width,scrollbox1.Height, True);
Align := alClient;
Show;//
end;

 
你能不能用Windows.SetParent解决呢?但是这样旧没有dock的效果。
如果不能满意的话你看以前的讨论。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=872902
也听听有没有最佳答案。
 
to 任豆豆
采用你的方法,可以嵌入,但是在关闭主窗体时,出现内存错误,是不是什么没有释放
,而我的方法显示不错,但是不会出现内存错误
怎么回事
 
传入 Screen 参数 ok
 
我也遇到这个问题,来此学习!
 
问题已解决

在主窗体释放时加
if assigned(childform) then
begin
childform.free;
childform := nil;
end;
 
谢谢各位的参与
 
多人接受答案了。
 
后退
顶部