Delphi呼叫告警系统监控面板的动态实现

更新时间:2024-04-14 作者:用户投稿原创标记本站原创 点赞:19149 浏览:83798

摘 要:本文介绍了用动态创建MPI(Multi-Page Interface)的方法实现多业务窗口,用动态创建自定义DBCtrlGrid组件的方法实现呼叫告警监控面板.

关 键 词 :Dephi7 动态;MPI;DBCtrlGrid

中图分类号:X924.3

多标签页、窗格式监控面板比较直观和方便,可以用在多种监控系统上.

呼叫告警系统监控面板,通过权限控制动态创建一定数量的标签页(一般不再关闭),然后将各个房间(也可以是各个监控点)的资料和状态在窗格中显示出来,后台定时扫描数据库,如有告警或者异常状态则背景用红色表示,用来提醒、处理告警,本文尝试用福利院(医院)呼叫告警系统的一个监控模块来介绍用动态创建MPI的方法实现多业务窗口,并用动态创建自定义DBCtrlGrid组件的方法实现呼叫告警监控面板.

1.自定义控件类

1.1 自定义DBCtrlGrid控件类,在继承TDBCtrlGrid控件的基础上,增加了数据源、数据集、图像类,和动态感知控件以及定时器.用来定时扫描后台Oracle 数据库中房间的状态,显示在自定义DBCtrlGrid中,自定义DBCtrlGrid控件类中对基类的构造函数进行的重载,以方便传递动态SQL参数,用来实现不同院名数据的获取.

//自定义TDBCtrlGrid控件,很重要要用自定义控件的panel属性;

TMDBG等于class(TDBCtrlGrid)

ds:TDataSource;//数据源

orq: TOraQuery; //连接Oracle数据库

img:TImage;//显示小人图标

name:TDBText ;//显示人名

room:TDBText;//显示房间号

tm:TTimer;//定时器

private

v_sql:string;//SQL语句

public

//构造函数重载 增加初始化参数,Str_Sql是SQL语句,ASession是ORACLE连接session

constructor Create(Aowner:TComponent;Str_Sql :string;ASession :TOraSession);overload;


destructor Destroy();override;//覆盖析构函数,主要用做控件对象的释放

procedure MyPaintPanel(DBCtrlGrid: TDBCtrlGrid;Index: Integer);//重绘Panel颜色

procedure Mytimer(Sender: TObject);//定时器自定义过程

end;

MyPaintPanel过程重新实现了TDBCtrlGrid的OnPaintPanel事件,Mytimer过程重新实现Ttimber的Ontimer事件.

1.2 自定义TtabSheet用于动态创建页面,嵌于TpageControl中

TMYTabSheet 等于 class(TTabSheet)//自定义 TTabSheet

DbCtrlGrid:TMDBG;//自定义TMDBG类

Public

//构造函数重载

constructor Create(Aowner:TComponent;Str_Sql :string;ASession :TOraSession);overload;

destructor destroy();override;//析构函数覆盖

end;

2.编码实现

动态创建MYTabSheet和MYDBCtrlGrid控件,将MYDBCtrlGrid嵌入MYTabSheet,然后再将MYTabSheet赋给PageControl控件,形成一个标签业务界面.

TMDBG构造函数,初始化成员.

constructor TMDBG.create(Aowner: TComponent; Str_Sql: string;

ASession: TOraSession);

begin

inherited create(Aowner);//继承

v_sql:等于Str_Sql;

ds:等于TDataSource.Create(self);//此处self 是TMDBG,TMDBG控制该对//象的生存周期

orq:等于 TOraQuery.Create(self);

img:等于TImage.Create(self);

name:等于TDBText.Create(self) ;

room:等于TDBText.Create(self) ;

orq.Session:等于ASession;//本例子使用了ODAC控件,此处需要连接OraSession控件

ds.DataSet:等于 orq;

self.DataSource:等于ds;// TMDBG的数据源

name.DataSource:等于ds;//数据源

name.Parent:等于Self.Panel;//重要Parent必须是Self.Panel才能每个窗格内都显示出来

name.DataField:等于'elder_name';//数据源中的字段,老人人名

name.Transparent:等于true;//设置背景透明

room.DataSource:等于ds;

room.Parent:等于Self.Panel;

room.DataField:等于'ELDER_ROOM_ID';//数据源中房间号

room.Font.Size:等于12;//设置为12号字体

room.Font.Style:等于[fsBold];//加粗

img.Parent:等于self.Panel;//重要,Parent必须是Self.Panel才能每个窗格内都显示出来否则//只可能显示出一个图像

orq.SQL.Clear;

orq.SQL.Text:等于v_sql;//传递动态SQL语句

orq.Prepared:等于true;

orq.Open;//打开查询数据集

tm:等于TTimer.Create(Self);

tm.Interval:等于5000;//扫描间隔时间

Self.OnPaintPanel:等于MyPaintPanel;//TDBCtrlGrid的OnPaintPanel事件实现过程重新实现

tm.OnTimer:等于Mytimer; // Ttimer的OnTimer事件实现过程重新实现

tm.Enabled:等于true;

end;

3.结束语

通过本文,可实现动态创建MPI界面和基于TDBCtrlGrid控件的监控窗格,经过进一步改进该监控界面还能用于程控交换监控、设备监控、以及视频监控等系统.本例子在Delphi7和WinXP环境下通过.