由于项目比较大,所以用了主程序加包的方式开发,也就是把业务窗体写在运行期包(runtime)里,然后主程序通过LoadPackage调用包里的接口函数,并将该窗体实例化后内嵌到主程序的Panel控件上,但是多次尝试总是不成功,主要问题出在内嵌上,请问大家通常是怎么解决此类内嵌问题的?希望给个思路,百分感谢(想万分感谢来着,可惜CSDN一次只让给100分)。
注:主程序内的窗体内嵌没有问题,主程序调用包窗体并show出来也没有问题,就是内嵌报错。
注:主程序内的窗体内嵌没有问题,主程序调用包窗体并show出来也没有问题,就是内嵌报错。
主程序里加载包
然后动态创建对象
设置Parent属性
呵呵!
RegisterClass(TFrame2);
finalization
UnRegisterClass(TFrame2);------------------------------------- tmpFrame := TFrame(FindClass('TFrame2')).Create(Self);
tmpFrame.Parent := pnl1;
var
Style:DWORD;
begin
Style:=GetWindowLong(HFrom,GWL_STYLE);
Style:=Style and WS_CHILD;
SetWindowLong (HFrom, GWL_STYLE, Style);
SetWindowPos (HFrom, HWND_TOP, 0, 0, 1, 1, SWP_NOSIZE);
Windows.SetParent(HFrom,ParentPanel.Handle);
ShowWindow(HFrom,SW_SHOW);这个是我的
HForm是要显示的窗口句柄 ParentPanel 是要显示到的Panel
我按照你的代码测试了一下,类注册没问题,也能找到该类(showmessage(findclass('TFrame2').ClassName)),但是执行
tmpFrame := TFrame(FindClass('TFrame2')).Create(Self);
这句出异常,请问是何缘故?
TframeClass = class of TFrame ;
……
tmpFrame := TframeClass(FindClass('TFrame2')).Create(Self);
不好意思!
呵呵!
再试一下!
应该可以的!
我这里运行没有问题!
需要的话源码发给你!