|
Result:=True…… 4.4 一个具体的实现方法 为了结构化管理插件,方便今后的系统扩充,我们可以结合数据库记录可用的DLL信息,然后通过查询数据库记录动态访问DLL程序。 4.4.1 系统模块表设计 对于MIS系统,可以利用已有的DBS条件建立一个系统模块表,记录DLL文件及映射到系统模块中的相关信息 字段名 作用 类型 AutoID 索引 INT modAlias 模块别称 VARCHAR modName 模块名称 VARCHAR modWndClass 窗体唯一标识 VARCHAR modFile DLL路径 VARCHAR modMemo 备注 TEXT n 模块别称是用来在编程设计阶段统一命名的规则,特别是团队开发时可以供队员参考。 n 模块名称将作为ACAPTION参数传递给SHOWDLLFORM函数作为DLL窗口的标题。 n 窗体唯一标识是DLL子模块中主窗口的CLASSNAME,用来在运行时确定要控制的窗口。 n DLL路径保存DLL文件名称,程序中将转换为绝对路径。 4.4.2 插件信息数据结构 定义一个记录插件相关信息的数据接口可以集中控制DLL插件。在Interface部分加入如下代码: type //定义插件信息类 TMyPlugins = class Caption:String; //DLL窗体标题 DllFileName:String; //DLL文件路径 WndClass:String; //窗体标识 UserID:string; //用户名 ProcAddr:THandle; //LOADLIBRARY载入的库句柄 FuncAddr:Pointer; //SHOWDLLFORM函数指针 FuncFreeAddr:Pointer; //FREEDLLFORM函数指针 end; …… 为每个插件创建一个TMyPlugins的实例,下文会讨论对这些实例的初始化方法。 4.4.3 插件载入函数 在本示例中DLL窗口是在HALL中触发打开子窗口的事件中载入并显示的。按钮事件触发后,先根据插件结构体实例判断DLL是否已经加载,如果已经加载,则控制窗口的显示或关闭;如果没有加载则访问数据表将字段赋值到插件结构体中,然后执行载入、获得指针的工作。 局部代码如下 …… //----------------------------------------- //Name: OpenPlugin //Func: 插件信息类控制过程: 初始化==》设置权限==》载入DLL窗口 //Para: APlugin-TMyPlugins; sAlias别名; iFuncValue权限值 //Rtrn: N/A //Auth: CST //Date: 2005-6-2 //----------------------------------------- procedure TFormHall.OpenPlugin(AFromActn: TAction ;APlugin:TMyPlugins; sAlias:string; sUserID:string); var hWndPlugin:HWnd; begin //判断插件窗口是否已经载入 hWndPlugin:=FindWindow(PChar(APlugin.WndClass),nil); if hWndPlugin <> 0 then //插件窗口已经载入 begin if not IsWindowVisible(hWndPlugin) then 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 [聊天工具]让IE 7也用上鼠标手势 [常用软件]IE 7出炉,Firefox 2当道.谁才是“王者”? [常用软件]绕过WGA安装IE 7 Beta3 5450 [VB.NET程序]VB.NET实现DirectSound9 (7) 录音 [VB.NET程序]DirectX 7 编程初步 [VB.NET程序]VB程序员眼中的C# 7 [Delphi程序]DELPHI7 如何在编写可视组件中传递一个事件到组件… [Delphi程序]Delphi7 的 WebService 与 数据库 [Delphi程序]Delphi7 从子线程中发送消息到主线程触发事件执行 [Delphi程序]Delphi 7 中使用RAVE报表(一)
|