目的:将DLL中的窗体弄到主程序的一个面板中显示
问题如下:
已经在dll中做好窗体了,并且dll中定义函数可以创建并且显示窗体.该函数有个参数是传递主程序的一个面板共dll窗体当
parent.
相关代码如下
DLL中
procedure AAA(AppHandle:HWND;AFrmParent:TPanel;src:TScreen);stdcall;
begin
Application.Handle := AppHandle;//将主程序句柄传进来
Screen := src;
//创建窗体,并显示在指定的Panel上
Application.CreateForm(TF_A,F_A);
F_RightControl.Parent := AFrmParent;
{
另一种实现方式
F_A := TF_A.Create(Application);
F_A.showmodal;
F_A.Free;
}
end;上面的代码可以把窗体创建出来,可是主窗口的面板中却看不到窗体,不知道这个DLL窗体到底跑哪去了.
恳请高手赐教.
问题如下:
已经在dll中做好窗体了,并且dll中定义函数可以创建并且显示窗体.该函数有个参数是传递主程序的一个面板共dll窗体当
parent.
相关代码如下
DLL中
procedure AAA(AppHandle:HWND;AFrmParent:TPanel;src:TScreen);stdcall;
begin
Application.Handle := AppHandle;//将主程序句柄传进来
Screen := src;
//创建窗体,并显示在指定的Panel上
Application.CreateForm(TF_A,F_A);
F_RightControl.Parent := AFrmParent;
{
另一种实现方式
F_A := TF_A.Create(Application);
F_A.showmodal;
F_A.Free;
}
end;上面的代码可以把窗体创建出来,可是主窗口的面板中却看不到窗体,不知道这个DLL窗体到底跑哪去了.
恳请高手赐教.
解决方案 »
- 希望有高手可赐教Delphi基础。。
- 为何self.打这个点后不弹出相关内容来。几天了都没解决,急,谁帮忙。
- 在Quickrep里的QRDBtext如何将它自动换行呀?谢谢……
- opendialog1中,怎样选种多个文件,然后文件名再用字符串识别出来
- 哪位知道有Sql Server 2000 下载的网址吗?????
- 十万火急,这是什么,求解决之道
- 关于f1book6的objcreate事件的用法?
- 介绍几个好的按钮控件!!!!!!!
- 開發多用戶的綱絡版數據庫,高手們,你們是用標准的 tedit,tcompbox + sql語句,還是數據敏感控件 Tdbedit,tdbgird.我一直迷惑,不知其解..
- 告诉我mts在那能找到?我给100分。
- 代码讨论
- 如何将dbgird某个字段值赋值给变量
begin
Application.Handle := AppHandle;//将主程序句柄传进来
Screen := src;
//创建窗体,并显示在指定的Panel上
Application.CreateForm(TF_A,F_A);
F_A.Parent := AFrmParent;
{
另一种实现方式
F_A := TF_A.Create(Application);
F_A.Parent := AFrmParent;
F_A.showmodal;
F_A.Free;
}
end;
F_A := TF_A.Create(nil);
F_A.showmodal;
F_A.Free;
就可以了
=================================
另一种,就是二边都设计好后,在主程序中,打开一个DLL子FORM,然子程序名或HANDLE传过来.把他加入到其它相应的容器里面去.
一,通过函数将DLL中创建的窗体对象引出到主程序中,然后在设置这个窗体的Parent属性
二.将主程序中的一个parent组件(比如Panel)通过函数传递到DLL中然后在DLL中创建窗体,设置parent属性
可是遗憾的是这两种方法都不能达到目的.
窗体是可以创建出来的,但是显示不出来,目标面板中看不到窗体.不知什么原因,高手赐教啊.
function openForm(FormName:String):TForm ;
把创建的Form返回来,然后把你这个Form搞到你的panel上,Dock上去就可以了
这是代码和程序,楼主下载试试看,是不是你想要的
这里的代码太神奇了.
我按照里面的代码即使是复制一遍也不能实现预期功能,主要DLL窗体放到面板后就不见了,试了好久都搞不定.
真是不可思议,而且里面的DLL文件也很特别,我复制源码做了一个DLL用不同名字命名后,给它的主程序调用,
也出现了同样的问题(窗体放到面板后只是一闪,然后就不见了).
不知道是这个代码里面隐藏着什么高深的地方我没有发现,还是我的系统有问题.
希望高手研究下
操作步骤如下:Project-->Options-->Packages-->把“Build with runtime packages”前面打勾,在下面输入“vcl”-->确定-->编译希望楼主到这帖可以结帖给分
还想问最后一个问题,这样做(EXE与DLL都带VCL包编译)的理由是什么,为什么会出现这么大差别.