具体代码是这样的.Function Tfrm_frame.CreateChildForm(tLibHandle: THandle; tFormHandle: Integer): Boolean;
Var
Child : TMDIChild;
Begin
{ create a new MDI child window }
//showmessage('准备创建窗体');
Child := TMDIChild.Create(self);
Child.CanSize := true;
self.Delay(100);
//指定DLL窗体的父窗体为MDI的子窗体
TForm(tFormHandle).ParentWindow := Child.Handle;
//设置边界
TForm(tFormHandle).BorderStyle := bsNone;
.
.
.
.
.
.
end;Procedure Tfrm_frame.openModule(dllPath: String);
Var
ModuleCreateProc : TCreateModule;
tmpLibHandle : THandle;
tmpFormHandle : Integer;
showType : Integer; //显示类型,0:模式窗体 1:非模式窗体
c_dllpath : Array[0..255] Of Char;
Begin
StrPCopy(c_dllpath, dllPath);
tmpLibHandle := LoadLibrary(c_dllpath); If (tmpLibHandle <> 0) Then
Begin
tmpFormHandle := Application.Handle;
ModuleCreateProc := GetProcAddress(tmpLibHandle, 'CreateModule');
ModuleCreateProc(tmpFormHandle, Application); CreateChildForm(tmpLibHandle, tmpFormHandle, showType);
End
end
Var
Child : TMDIChild;
Begin
{ create a new MDI child window }
//showmessage('准备创建窗体');
Child := TMDIChild.Create(self);
Child.CanSize := true;
self.Delay(100);
//指定DLL窗体的父窗体为MDI的子窗体
TForm(tFormHandle).ParentWindow := Child.Handle;
//设置边界
TForm(tFormHandle).BorderStyle := bsNone;
.
.
.
.
.
.
end;Procedure Tfrm_frame.openModule(dllPath: String);
Var
ModuleCreateProc : TCreateModule;
tmpLibHandle : THandle;
tmpFormHandle : Integer;
showType : Integer; //显示类型,0:模式窗体 1:非模式窗体
c_dllpath : Array[0..255] Of Char;
Begin
StrPCopy(c_dllpath, dllPath);
tmpLibHandle := LoadLibrary(c_dllpath); If (tmpLibHandle <> 0) Then
Begin
tmpFormHandle := Application.Handle;
ModuleCreateProc := GetProcAddress(tmpLibHandle, 'CreateModule');
ModuleCreateProc(tmpFormHandle, Application); CreateChildForm(tmpLibHandle, tmpFormHandle, showType);
End
end
解决方案 »
- 如何判断动态的QUERY时候存在
- delphi中TCP网络通讯的例子?
- 新手请问,如何从网页上提取一个表格,并把其内容存入数据库中?(急)谢谢
- 请教一个对高手来说不难的问题,控件编程高手请进!(系统不能给超过100分,问题解决后另加……)
- 讨论dlephi中的sql
- jpg图片处理,可缩放,点某个位置后出现一个矩形框,并将这个框里的图复制到屏幕另外的地方,如有源代码者单独给100分
- 怎么扩展一个控件的onclick事件
- 如何让控件响应delete键??
- shelllistview中禁止重命名和禁用退格键问题?
- 如何让一个子窗体在后台执行?
- 求助关于小数位数的问题?
- 不同网域之间的DCOM连接问题,在线求救!
//指定DLL窗体的父窗体为MDI的子窗体
TForm(tFormHandle).ParentWindow := Child.Handle;
//设置边界
TForm(tFormHandle).BorderStyle := bsNone;
为
SetWindowLong(TForm(tFormHandle).Handle,GWL_STYLE,GetWindowLong(TForm(tFormHandle).Handle,GWL_STYLE) and not (WS_CAPTION or WS_THICKFRAME));
windows.SetParent(TForm(tFormHandle).Handle,Child.Handle);
试试
你看一下这个....
按着你的方法作了.快捷键是可以用了.但DLL窗体显示时,并没有在MDI子窗体中显示.并且,在我点击了MDI窗体的其他地方后,DLL窗体显示在主程序窗体后面了.
你的方法,我暂时无法在我现在的代码上实现,我的程序已经快作完了,马上要交.很感谢你的回复.
这就是用API把子窗体嵌到主窗体中呀
一般在主窗体中放一个panel,然后用
windows.SetParent(panel.Handle,ChildForm.Handle);