Powerbuilder Graph 控件使用案例

        图形控件具有直观视觉展示的功能,powerbuilder的graph图形可以由2种方式生成,一种是数据窗口方式,一种是控件方式。数据窗口生成的特点是构造非常方便,其缺点是不能实现多表数据生成图形,不显示具体的数值,貌似其图形的颜色也无法修改(用SetSeriesStyle()试了几次也未成功)。在网上搜索了一个,对图形控件的文章不是很多,经不断摸索,也终于算基本弄明白Graph控件的几个基本函数,做出的图形也基本满足了自己的要求,先上图。

         其特点:1、图形的着色可由函数控制,根据自己喜欢的颜色生成。2、鼠标移动到系列轴上时可显示数值。3、系列轴的数值(也可包括百分比)显示在系列轴的下方。具体实现方法如下:

        先放一个graph控件在窗口上,自动命名为gr_1。在窗口的open事件或gr_1的constructor下编写代码,自动生成图形。代码如下:

        //设置类型轴的标签 

         gr_1.category.label = "时间"

        //设置数值轴的标签

        gr_1.values.label = "次数"

        //分别从3个表中取出想要的数值,此代码大家自己写吧。主要用到数组和select count(*)语句和循环语句。这里简单的表示一下。如果不需要展示数值和百分比,代码相对比较简单了。

        int i_tz[],i_jd[],i_fz[] //用于分别记录各小时内的数值,展示在系列轴下。

        int i_all[] //用于记录各系列总数值,用于生成百分比,展示在系列轴下。

        int i_day_all = 0 //用于生成全部累计值

        int j //用于循环计数

        for j = 1 to 23 //按小时分布

        select count(*) into :i_tz[j] from tz where hour(start_time) = :j and XXX(其它条件);

        select count(*) into :i_jd[j] from jd where hour(start_time) = :j and XXX(其它条件);

        select count(*) into :i_fz[j] from fz where hour(start_time) = :j and XXX(其它条件);

        i_all[j] = i_tz[j] + i_jd[j] + i_fz[j]

        next

        // 设置图形的标题。

        gr_1.title = "XXXX分布图" + string(i_day_all) + "次"

        //设置系列轴,也可增加变量统计各类型的总次数。如total_fz,total_jd,total_fz

        //这里要用到第1个函数controlname.AddSeries(seriesname)

        int series_tz,series_jd,seriese_fz //用于记录填加的系列轴的序号

        series_tz = gr_1.AddSeries("主线外破" + string(total_tz) + "次")

        series_jd = gr_1.AddSeries("主线外破接地" + string(total_tz) + "次")

        series_fz = gr_1.AddSeries("分支外破" + string(total_tz) + "次")

        //设置系列轴的填充色,注意系列轴的名称要与填加的名称保持一致,这里是名称不是序号

        //这里用到第2个函数controlname.SetSeriesStyle(seriesname,Foreground!,color)

        gr_1.SetSeriesStyle("主线外破" + string(total_tz) + "次",Foreground!,rgb(250,80,80))

        gr_1.SetSeriesStyle("主线外破接地" + string(total_tz) + "次",Foreground!,rgb(80,220,50))

        gr_1.SetSeriesStyle("分支外破" + string(total_tz) + "次",Foreground!,rgb(90,90,220))

         //设置类型轴的数值,同时显示次数和占比,同时填加数据

        //这里用到第3个函数controlname.AddCategory(categoryname),由于需要构造显示次数、占比,所以名字会较长。

        //这里用到第4个函数controlname.AddData(seriesnumber,datavalue,categoryvalue)

        //先构造类型轴的值

        //系列轴的排序是按文本方式,若不加"0",顺序不是正常的阅读习惯。

        string cate_value 

        for j = 1 to 23

        if j < 10 then

        //使用"~r~n"回车符,使时间、次数和占比分别位于不同的行

        cate_value = "0" + string(j) + "时" + "~r~n" + string(i_all[j]) + "次" +"~r~n" + string(round(i_all[j]*100/i_day_all),2) + "%"

        else

        cate_value =string(j) + "时" + "~r~n" + string(i_all[j]) + "次" +"~r~n" + string(round(i_all[j]*100/i_day_all),2) + "%"      

        end if

        //设置类型轴的值

        gr_1.AddCategory(cate_value)

         //为类型轴填加数据

        gr_1.AddData(series_tz,i_tz[j],cate_value)

        gr_1.AddData(series_jd,i_jd[j],cate_value)

        gr_1.AddDate(series_fz,i_fz[j],date_value)

        next

       移动鼠标显示各系列数值、显示数值背景透明大家可以到网上自行查找,经测试按其代码可以实现。

        大功告成。这里只用到关于graph的4个函数,其他函数可以通过powerbuilder的帮助功能查询使用。

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值