100分求DLL高手给一个DLL封装MDI的例子,请细看说明(100分)

  • 主题发起人 richardi
  • 开始时间
R

richardi

Unregistered / Unconfirmed
GUEST, unregistred user!
开发工具Delphi7。<br>要做一个程序,把主窗口写成EXE,主窗口是MDI窗口,然后通过菜单调用各个DLL里面的MDI子窗体,由于系统进入主窗口才决定链接哪个数据库,所以在EXE中放一个ADOconnection对象,当调用DLL时把EXE的ADOconnection要传给DLL,保证使用的是同一个数据库。<br>当调用DLL子窗体时需要处理一下,不让DLL子窗体出现多次,只出现一次就行。<br>请精通DLL的高手指教,网上有很多例子,但是基本都是封装SDI窗体的例子,和MDI不是一回事,要么就是不带数据库的,那样的很简单,不是我想要的。<br>我的邮箱是richardi@126.com<br>期待高手出现。。。
代码:
 
曾写过,是可以把连接当成对象传到子窗体,但是很麻烦,最简单的还是在DLL内重新连接一个吧。将连接字符串传到DLL就行了。
 
传递连接字符串怎么传啊?那样会不会一个程序同时打开多个DLL就会有多个ADOconnection连接啊,能给我发个例子吗?<br>以前我一直把所有的窗体都编译成一个大exe,没有封装过的经验
 
unit uExport;<br><br>interface<br>Uses<br>&nbsp; Windows, Forms, Classes, ADODB;<br><br>Type<br>&nbsp; TrdParam = Record<br>&nbsp; &nbsp; AppMain &nbsp; &nbsp; : TApplication;<br>&nbsp; &nbsp; ADOConn &nbsp; &nbsp; : TADOConnection;<br>&nbsp; &nbsp; sStationID &nbsp;: String;<br>&nbsp; &nbsp; sHosCode &nbsp; &nbsp;: String;<br>&nbsp; &nbsp; sHosName &nbsp; &nbsp;: String;<br>&nbsp; &nbsp; sOpCode &nbsp; &nbsp; : String;<br>&nbsp; &nbsp; sOpName &nbsp; &nbsp; : String;<br>&nbsp; End;<br><br>&nbsp; Procedure InitPlug(prdParam : TrdParam); Export; StdCall; Exports InitPlug;<br><br>&nbsp; Procedure OpenMDIChild(TfrmMDIChild: TComponentClass; var frmMDIChild: TForm);<br><br>Var<br>&nbsp; rdParam : TrdParam;<br>&nbsp; <br>implementation<br>uses<br>&nbsp; Test;<br><br>Procedure OpenMDIChild(TfrmMDIChild: TComponentClass; var frmMDIChild: TForm);<br>var<br>&nbsp; iLoop: integer;<br>begin<br>&nbsp; //-- 1. 查询子窗体是否已经存在<br>&nbsp; for iLoop:=Application.MainForm.MDIChildCount-1 downto 0 do<br>&nbsp; &nbsp; if Application.MainForm.MDIChildren[iLoop]=frmMDIChild then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; frmMDIChild.Show; &nbsp; &nbsp; &nbsp; &nbsp; // 已经存在, 推到前面<br>&nbsp; &nbsp; &nbsp; exit; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 退出<br>&nbsp; &nbsp; end;<br>&nbsp; //-- 2. 不存在则创建<br>&nbsp; Application.CreateForm(TfrmMDIChild, frmMDIChild);<br>&nbsp; frmMDIChild.Show;<br>end;<br><br>Procedure InitPlug(prdParam : TrdParam);<br>Begin<br>&nbsp; rdParam := prdParam;<br>&nbsp; Application := prdParam.AppMain;<br>&nbsp; //<br>&nbsp; OpenMDIChild(TComponentClass(TFrmTest), TForm(FrmTest));//需修改<br>End;<br><br>end.
 
多人接受答案了。
 
顶部