打印本文 打印本文 关闭窗口 关闭窗口
初探Delphi 7 中的插件编程
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4829  更新时间:2009/4/23 18:26:40  文章录入:mintao  责任编辑:mintao
                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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口