关于DLL中的MDI窗口问题... My God!这个问题到底难不难,怎么没人回答?谢谢各位大虾鼎力相助,本人急用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一种方法是通过dll导出函数,传递application到dll里面来.但是可能导致问题.最完善的解决办法是dll和exe都build with runtime package!!!至于原因嘛?就是因为这样以后,dll和exe公用了几个全局变量!!!application,screen等!! dll中Application.handle=hwnd;Application.CreatMdichild(...); 我的方法是定义DLL的FORM的属性为MDICHILD,EXE中的主FORM为MDI,调用DLL的一个函数显示其中FORM。 “浪人”的回答有点方向,但没有完全代码。“泰山”和“小于”把DLL中的MDI窗口看得太过简单了,其实是行不通的。我蛮感兴趣的,待我试试... 如上所说function TTSale.ShowForm(DCOM: OleVariant; const Provider: WideString; AOwner, Application1: OleVariant): HResult;var p1,p2,p3:longword;begin p1:=longword(dcom); p2:=longword(AOwner); p3:=longword(application1); application:=TApplication(p3); Main:=TMain.Create(TComponent(p2)); Main.DCom1:=tdcomconnection(p1); Main.providername:=provider; result:=0;end; sorry 有点错误代码如下:dll中: procedure ShowMdiChild(handle:THandle);var Mdiform1:TForm1;begin Application.Handle:=handle; Application.CreateForm(TForm1, Mdiform1); Mdiform1.Show;end;注意该窗体的formstyle=fsmdichild; onclose事件的Action参数未fsFree;在exe中:ShowMdiChild(Application.Handle);该窗体的formstyle=fsmdiform这样就可以了, dll中的Mdi就这么简单!! 我刚试过 使用的是D6+win2k duzr:我已按你的要求把程序源代码寄给你,在Delphi 5/Windows 98上运行通过,请你试试。 使用IXMLDocument解析XML的问题??? delphi中有计算矩阵的函数(比如求逆矩阵)和求指数的函数吗? 一个屏幕不断闪烁的问题 fastreport打印时有时会发生第二张单据中的某一页夹在其它单据中间打出来,为什么? 问个非常简单的问题!!关于D7出错 装DELPHI时有一个Java Plug-in Control Panel是做什么用的? 3个问题!分不够再加!UP也有分哈! 高手来看:关于数据库算法 求解 继续问:Query和DBEdit之间的“矛盾”。 开发多语言版本的软件,怎样做最方便??? combobox
最完善的解决办法是dll和exe都build with runtime package!!!至于原因嘛?就是因为这样以后,dll和exe公用了几个全局变量!!!application,screen等!!
Application.handle=hwnd;
Application.CreatMdichild(...);
“泰山”和“小于”把DLL中的MDI窗口看得太过简单了,其实是行不通的。我蛮感兴趣的,待我试试...
function TTSale.ShowForm(DCOM: OleVariant; const Provider: WideString;
AOwner, Application1: OleVariant): HResult;
var
p1,p2,p3:longword;
begin
p1:=longword(dcom);
p2:=longword(AOwner);
p3:=longword(application1);
application:=TApplication(p3);
Main:=TMain.Create(TComponent(p2));
Main.DCom1:=tdcomconnection(p1);
Main.providername:=provider;
result:=0;
end;
代码如下:
dll中:
procedure ShowMdiChild(handle:THandle);
var Mdiform1:TForm1;
begin
Application.Handle:=handle;
Application.CreateForm(TForm1, Mdiform1);
Mdiform1.Show;
end;
注意该窗体的formstyle=fsmdichild; onclose事件的Action参数未fsFree;在exe中:
ShowMdiChild(Application.Handle);
该窗体的formstyle=fsmdiform这样就可以了, dll中的Mdi就这么简单!! 我刚试过 使用的是D6+win2k
我已按你的要求把程序源代码寄给你,
在Delphi 5/Windows 98上运行通过,
请你试试。