统计图数值动态显示的实现

PB在做MIS系统时,多种风格的数据窗口为统计查询提供了丰富多彩的显示样式,而统计图风格的数据窗口就是其中最直观有效的,但使用它时有个遗憾,就是不能看到其中准确的数据,只能估计它,本文通过一个实例给出一个实现统计图数值动态显示的方法。  

实现过程如下(利用PB9自带数据库,EAS   Demo   DB   V9):

1、建立一个工作空间(workspace),取名为:graphvalue。

2、建立一个应用(application),取名为:graphvalue。

3、准备一个统计图类型选择的图片文件grgallry.bmp,如下图:

 

 

4、建立一个Graph风格的数据窗口d_graph_dept,数据窗口的SQL语法为:

SELECT   "employee"."emp_id","employee"."sex","department"."dept_name"    

FROM   "employee"     ,     "department"  

WHERE   "employee"."dept_id"   =   "department"."dept_id"   ;

 

5、定义d_graph_dept的属性:

Category:department_dept_name                     (横坐标为部门)

Value:count(employee_emp_id   for   graph)   (纵坐标为部门人数)

Series:employee_sex                                         (性别)

 

6、建立Main类型窗口,取名为:w_graph_value,设置如下控件:

 

控件名 类型 说                       

dw_1 Datawindow 显示统计图,Datawindow   object   name为:d_graph_dept。      

st_help Static   Text 用于动态显示数值,BackColor设置为Tooltip。      

cb_close Command   Button 关闭窗口。  

 

7、编写窗口脚本

1)、定义窗口实例变量

integer   ii_aseries   =   0

integer   ii_datapoint   =   0

 

2)、窗口的open事件:

//数据检索

dw_1.SetTransObject(sqlca)

dw_1.Retrieve()

//隐藏

st_help.Visible   =   False

 

3)、数据窗口的ue_mousemove事件(Event   ID:pbm_mousemove)脚本:

Integer   li_datapoint

Integer   li_aseries

String ls_cate_value

Double ldb_value_data  

Long   ll_length

ldb_value_data   =   0

//得到鼠标所在目标的组号和数据号

THIS.ObjectAtPointer("gr_1",   li_aseries,   li_datapoint)

//得到部门号(即横坐标值)

ls_cate_value   =   THIS.CategoryName("gr_1",   li_datapoint)

//   如果鼠标所在位置没有值显示

IF   ls_cate_value   =   ''   OR     li_datapoint   =   0   OR   li_aseries   =   0   THEN

st_help.Visible   =   FALSE   //隐藏

li_aseries   =   0  

ii_datapoint   =   0

RETURN

END   IF

//   组号和数据号上次一样,则文本保持显示,但位置不再改变

IF   li_datapoint   =   ii_datapoint   AND   li_aseries   =   ii_aseries   THEN

RETURN

END   IF

//   记录组号和数据号,以便下一次比较时用

ii_datapoint   =   li_datapoint

ii_aseries       =   li_aseries

//取得纵坐标值

ldb_value_data   =   THIS.GetData('gr_1',   li_aseries   ,   li_datapoint)

//通过st_help显示数值,可根据需要定义

st_help.text   =   string(ldb_value_data)   +   "人"

//定位

ll_length   =   len(st_help.text)

st_help.width   =   ll_length   *   38  

st_help.move(Parent.PointerX()   -   st_help.width/2   ,Parent.PointerY()   -   st_help.height   -   40)

//显示

st_help.Visible   =   TRUE

4)、cb_close的clicked事件

Close(Parent)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值