用Delphi写MIS类程序(九)

2.5 整理框架

       在上一章的1.6节中,我们第一次整理出一个属于自己MDI应用的框架,而我们在上一节中也完成了MDI的登录界面等,在这一节中,我们再接再厉,把登录界面相关的东西也做到框架里面去!

2.5.1 把登录界面放到框架里面

登录的界面几乎是每个MIS都会需要的,但登录界面可能随着每一个应用的不同而样式也都不会一样。所以,我们采用子窗体与主窗体的方式把它分开。首先,把LoginForm.pas另存为../ FlexMDIFramework/LoginFormDefine.pas,并把这个Form的名字改为CustomLoginForm,再把WelcomeForm.pas另存为../ FlexMDIFramework/WelcomeFormDefine.pas,并把这个Form的名字改为 CustomWelcomeForm。接着我们使用类似于1.6节的方法,从上面两个父类Form中派生出frmLoginfrmWelcome,并保存好。

       接下来的工作,我们整理一下目录,在EXE下建立两个子目录,名为CustomChildForms,把WelcomeForm.pasLoginForm.pas放到Custom中,把ChildFormCChildFormD放到ChildForms中,然后回到Delphi中,通过使用删除单元文件,添加单元的方法所刚才那些文件修整完毕,最终得到如下图所示的结构:

 

另外,以上的操作完成后,记得修正MDI_Tutorial.dpr中的内容。

 

2.5.1 把基础表做得更通用

我们首先来看LoginFormDefine.pas中的内容:

……

  qry.Connection := GBaseConf.MainConnection;

  qry.SQL.Add('select count(*) from tb_operator where operatorid =:opid and psw =:psw');

  qry.Parameters.ParamByName('opid').Value := edtOperatorID.text;

……

在这里有一个写好的SQL语句,这个语句里面有一张表,这张表的表名包含在一个固定的字符串里面,因为我们这个MDI框架是准备以后能重复使用的,那意味着这个操作员表也会被复用,有可能应用A里面的操作员表是tb_operator,应用B里面的操作员表也是tb_opeartor,这样本来没有什么问题,但如果这两个应用恰好安装在同一个库里面的时候,就可能发生名字上的冲突了,为了避免这种情况的发生,我们应该使用不同的两个名去命名这两个操作员表。但如果每次都去修改Framework中的内容,那么这种Framework就没有通用的意义了,所以我们引用另外一个公用单元模版BaseStringUnitDefine.pas,及一个实际的公用单元 BaseStringUnit.pas,这两个单元的代码如下:

BaseStringUnitDefine.pas(保存在FlexMDIFramework下)

unit BaseStringUnitDefine;

 

interface

type

  TCustomBaseString = class (TObject)

  protected

    F_TB_OPERATOR : string;

  public

    property TB_OPERATOR : string read F_TB_OPERATOR;

  end;

 

var

  GBaseString : TCustomBaseString;

 

implementation

 

end.

 

BaseStringUnit.pas(保存在EXE/Custom下):

unit BaseStringUnit;

 

interface

uses

  BaseStringUnitDefine;

type

  TBaseString = class (TCustomBaseString)

  public

    constructor Create;

  end;

 

implementation

constructor TBaseString.Create;

begin

  self.F_TB_OPERATOR := 'tb_operator';

end;

 

initialization

  GBaseString := TBaseString.Create;

end.

同时改造MDI_Tutorial.dpr的引用顺序,把BaseStringUnitDefineBaseStringUnit放到最前面,并在程序的最好加上

……

  GBaseString.Free;

End.

最后就可以改造LoginFormDefine.pas了,把    

uses

  BaseConfUnit, BaseStringUnitDefine;

……

 qry := TADOQuery.Create(nil);

  qry.Connection := GBaseConf.MainConnection;

  qry.SQL.Add('select count(*) from '+ GBaseString.TB_OPERATOR + ' where operatorid =:opid and psw =:psw');

  qry.Parameters.ParamByName('opid').Value := edtOperatorID.text;

  qry.Parameters.ParamByName('psw').Value := edtPassword.Text;

……

通过这样的改造后,我们如果要改变这些基础表的表名时,只需要修改一下BaseStringUnit,pas就可以了,十分的方便。

最终的文件结构图:

 

 

       第二章就此结束,在第二章中我们一起研究了登录窗口,欢迎窗口的写法,另外我们把数据库的访问也引入进来了。在最后一节中,我们把这些所有新研究的成果全都融入到我们的框架之中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值