用Delphi写MIS类程序(八)

2.4 让界面更友好一些

       经过上面的改进,我们有了一个共用的设置类,我们可以通过这个共用的设置类来访问诸如数据库连接等一些MIS的基本属性。现在我们再来运行一下程序,不过这次我们先把SQL Server关闭一下,然后再来看是什么样的效果,我们会发现,当你运行程序时,程序会等了好久都没有反应。当然最后会出现一个报错说找不到SQL Server数据库服务。

       设想一下,当你的程序发布给最终用户用的时候,如果用户点击了程序,发现很久都没有反应,他可能会再多点击几下,这样的话,给最终用户的使用感受就非常的不好。因此,我们将在这一小节里面加一个欢迎的窗口(TfrmWelcome),一旦用户运行程序,该窗口就马上显示出来,同时告诉用户正在连接数据库(当然,这个窗体还可以显示你公司,或者你自己设计的一些有标志性的Logo,就像我的FlexQue一样)。好了,我们现在来添加一个新的窗体,并把这个窗体设置为无边框型。(BorderStyle设为bsNone),另外,我们在这个窗体上添加一个Label,用于显示一些消息,最后,把这个Form的名字改为frmWelcome,保存为WelcomeForm.pas

       因为我们想把建立数据库连接这一任务能在TfrmWelcome上显示。所以我们修改一下已有的代码,首先修改BaseConfUnit.pas中的,我们把BuildConnection;的调用从Create方法中删除。让外面的过程来调用BuildConnection这一方法。然后,在MDI_Tutorial,dpr中增加几行代码:

……

  GBaseConf := TBaseConf.Create;

 

  frmWelcome := TfrmWelcome.Create(nil);

  frmWelcome.ShowModal;

  frmWelcome.Free;

 

  frmLogin := TfrmLogin.Create(Application);

……

同时,记得把Application.CreateForm(TfrmWelcome, frmWelcome);这一句删除掉。

最后,我们来编写WelcomeForm的代码,代码如下:

unit WelcomeForm;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

type

  TfrmWelcome = class(TForm)

    Label1: TLabel;

    procedure FormCreate(Sender: TObject);

  end;

var

  frmWelcome: TfrmWelcome;

implementation

uses

  BaseConfUnit;

{$R *.dfm}

procedure TfrmWelcome.FormCreate(Sender: TObject);

begin

  Label1.Caption := '正在建立数据库连接';

  Label1.Repaint;

  GBaseConf.BuildConnection;

end;

end.

       当程序运行后,我们发现并不是我们想像的那样,欢迎窗口并没有显示出来!这是为什么呢?我们来看一下程序,其实我们把数据库连接设置的调用放在FormCreate中是不合适的,因为FormCreate事件是当Form被创建时所产生的事件,那时候Form还没有被显示出来,所以我们是看不到欢迎信息的,那么我们把这个创建调用放到其它事件,例如FormShow中行吗?其实也是不行的,不信你可以试试看,原因跟刚才的差不多。其实在TForm里面的基本事件没有一个是合适的,那怎样解决这个问题呢?我自己想到两个方法(看看其它朋友有没有更好的方法了):第一,采用一个定时器,该定时器定时为1秒,当定时器响应事件被触发时就关闭定时器,然后再调用数据连接方法。因为定时器要等1秒,窗体一般都能初始化完毕并显示完毕了,这样就可以完成这件事情了。另一种方法是使用Windows的消息机制,因为PostMessage可以产生异步的效果,所以利用它就可以完成这个事情,现在让我们来看一下第二种方法的代码,代码如下:

unit WelcomeForm;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TfrmWelcome = class(TForm)

    Label1: TLabel;

    procedure FormShow(Sender: TObject);

  private

    procedure doit(var i :integer); message WM_USER + 100;

  end;

var

  frmWelcome: TfrmWelcome;

implementation

uses

  BaseConfUnit;

{$R *.dfm}

 

procedure TfrmWelcome.doit(var i: integer);

begin

  Label1.Caption := '正在建立数据库连接';

  Label1.Repaint;

  GBaseConf.BuildConnection;

  Close;

end;

procedure TfrmWelcome.FormShow(Sender: TObject);

begin

  PostMessage(WindowHandle, WM_USER + 100, 0, 0);

end;

end.

 

       如果没有错误的话,我们的程序应该能显示那个欢迎的窗口了。但如果数据库没有准备好的话,还是那个不友好的报错,所以这里要进行一下大的改动,做法是利用try…except机制来捕获异常,并把数据库接连的结果返回给主程序。所以最后的版本是这样的,首先来看WelcomeForm.pas中的代码:

{

MDI Tutorial v2.4

 Written by flexitime.

}

unit WelcomeForm;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TfrmWelcome = class(TForm)

    Label1: TLabel;

    procedure FormShow(Sender: TObject);

  private

    FRetValue : boolean;

    procedure doit(var i :integer); message WM_USER + 100;

  public

    property RetValue : boolean  read FRetValue;

  end;

 

var

  frmWelcome: TfrmWelcome;

 

implementation

uses

  BaseConfUnit;

{$R *.dfm}

 

procedure TfrmWelcome.doit(var i: integer);

begin

  Label1.Caption := '正在建立数据库连接';

  Label1.Repaint;

  try

    GBaseConf.BuildConnection;

    FRetValue := true;

  except

    on E : Exception do

      begin

        Label1.Caption := '连接失败!';

        MessageBox(WindowHandle, '数据库连接失败!', 'MDI_Tutorial', MB_ICONWARNING or MB_OK);

      end;

  end;

  Close;

end;

procedure TfrmWelcome.FormShow(Sender: TObject);

begin

  FRetValue := false;

  PostMessage(WindowHandle, WM_USER + 100, 0, 0);

end;

end.

 

MDI_Tutorial.dpr中的代码如下:

……

var

  ret : boolean;

 

begin

  Application.Initialize;

  GBaseConf := TBaseConf.Create;

 

  frmWelcome := TfrmWelcome.Create(nil);

  frmWelcome.ShowModal;

  ret := frmWelcome.RetValue;

  frmWelcome.Free;

  if ret then

    begin

      frmLogin := TfrmLogin.Create(Application);

      frmLogin.ShowModal;

      if frmLogin.RetValue then

        begin

          Application.CreateForm(TfrmMain, frmMain);

      end;

      frmLogin.free;

 

      Application.Run;

    end;

 

  GFormClassMgr.Free;

  GBaseConf.Free;

end.

       如果程序没有拼写错误的话,那么就应该能正常的运行的。当然现在我的程序只是一个示意的程序,你可以加上图片等等,这样就会漂亮很多了。

2.5 整理框架

……撰写中……

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MateyFrame是一款由Delphi开发的三层架构框架,经过多年的升级改进,版本由MateyFrame V1.0升级到了当前的MateyFrame V5.0版本。MateyFrame V5.0具有功能强大、负载量大、安全性高、可扩展性强、同时支持B/S与C/S运行模式、开发简单等特性。MateyFrame V5.0由中间层服务端、客户端框架、MateyWeb组件三部分组成,同时支持 Oracle、MSSQL、MySQL数据库。 中间层服务端 采用面向对象方法设计而成,具有稳定性强、安全性高、负载量大、可扩展性强等特性。 采用数据库连接池技术,支持多数据库应用及多种数据库的应用,可以很好的处理断网、数据库重新启动等异常情况,一旦外界环境恢复后,连接池将重新连接数据库,不需要重启服务程序。 使用HTTP协议与客户端进行通信,可以适合企业内网及企业外网等任何网络环境,更适合在Internet网络上运行程序。 服务端支持多种类型的大型数据库一起使用,支持的数据库有:Oracle、MSSQL、MySQL。 服务端采用插件技术开发,系统核心插件可以直接使用,另外用户可轻松地扩展自己需要的服务插件。 服务端采用会话管理技术,为每个客户端会话分配唯一的加密密钥,交互数据在底层进行加密传输,保证了数据在传输过程中的高安全性。 服务端支持多实例运行模式,当客户端用户量大增时,可以适当增加中间层实例,解决大并发量的问题。 服务端插件实现了真三层、伪三层的核心插件,用户可以根据安全级别选用任何一种模式进行应用。 服务端使用Win服务运行模式,重启服务器不需登录系统开启服务程序,服务端即可自动运行。 具有客户端程序发布功能,可以为客户端软件的自动更新服务。 客户端框架 客户端设计成 EXE+BPL+DLL 的文件结构模式,具有扩展性强、易于开发、易于维护、使用简单等特点; 程序框架同时支持B/S、C/S模式,即可以通过客户端运行程序,也可以通过浏览器运行程序,并且支持两种模式同时存在。 使用插件开发模式,业务功能根据实际需要封装在不同的模块 DLL 中,即插即用; 封装了强大的基类,底层数据访问、出错处理、权限控制等; 系统功能根据业务模块信息自动生成,可以手动配置功能菜单列表; 框架中包含用户及权限管理插件,拿来即用,此模块可严格控制各功能Form 的详细权限(添加、修改、删除)、特殊数据的读取权限; 框架中包含了数据字典、系统参数的设置功能,拿来即可用。 框架采用调用时下载相关依赖文件的模式进行程序更新,具有更新文件少、更新速度快等特点; 框架支持程序文件流加载模式,更新的程序文件不需要保存在客户端的机器上,可大大增强程序的安全性。 框架有设计模式与运行模式之分,在设计模式下客户端通过框架功能用SQL可以直接读取到数据库的数据,方便程序开发;但在运行模式中,此功能不可用,这样可以保证数据的安全性。 框架设计了通用的报表设计模块,用户只需简单调,就可以得到自己所需要的报表模板设计,得到功能所需要的报表。 可选用分页数据处理技术,使大批量数据分页返回,分解服务器的压力; 具有负载平衡的功能,当连接的中间层服务器端负载过大或者崩溃时,会自动转向其它可用中间层服务器。 具有断线重连功能,当网络的异常恢复时,系统底层连接会重新连接,不用重启程序就可使用。 框架提供超级查询组件,组件可以根据编号、名称、五笔码、拼音码对需要查询的数据进行快速过滤。 MateyWeb组件 MateyWeb组件是一款能被IE加载运行的ActiveX控件,它是客户端程序在B/S模式下运行的载体。 MateyWeb组件支持WinXP、Win2000、Win2003、Win7、Vista等操作系统。 MateyWeb组件支持IE及以IE为内核的所有浏览器。 应用场合 非常适合开发各种应用于Internet之上的大中型的MIS管理软件
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值