|
PowerBuilder是SYBASE公司推出的面向对象的可视化数据库开发工具。提供了各种类型的图形统计显示,便于以不同的方式显示图形化统计数值及所占百份比,使统计界面,一目了然,简捷易读。
---- 但PB统计图实现数据项统计时,若我们统计项过多,以至于数值显示重叠而密密麻麻,不能清楚显示。这时应用一小标签显示要察看项的统计数值或所占百分比或分裂出来明确显示(指饼图)。
---- 下面是解决这些问题的小方法:
---- PB中统计图数值显示及分裂。
----
在此应用的是数据窗口统计图对象D_graph:
---- 在显示窗口中放置一DataWindow
Control 命名为Dw_graph连接对象D_graph.。放置一Static
Text命名为St_1(显示鼠标点击统计图中统计项的数值,背景色可设为亮灰色,字体色可设为黑色,设置St_1.visible = false)
----
数据窗口Dw_graph.DoubleClicked! 事件中编写脚本:(双击时分裂点击项并显示统计数值)
integer Li_SeriesNbr, Li_ItemNbr,Li_no,Li_percent
double data_value=0
grObjectType object_type
string SeriesName=""
string CategoryName=""
/********************************************************
Find out where the user clicked in the graph
*******************************************************/
object_type = this.ObjectAtPointer
("gr_1",Li_SeriesNbr, Li_ItemNbr)
/********************************************************
If user clicked on data or category, find out which one
*******************************************************/
IF object_type = TypeSeries! THEN
SeriesName = this.SeriesName("gr_1",Li_SeriesNbr)
if SeriesName <> '' then
st_1.text = '第 ' + string
(Li_SeriesNbr) + ' 组 ---___ ' + string(SeriesName)
st_1.x = parent.PointerX()
st_1.y = parent.PointerY() - 65
st_1.visible = true
end if
ELSEIF object_type = TypeData! then//
or object_type = TypeCategory!
data_value = this.GetData("gr_1",Li_SeriesNbr, Li_ItemNbr)
CategoryName = this.CategoryName("gr_1",Li_ItemNbr)
SeriesName = this.SeriesName("gr_1",Li_SeriesNbr)
st_1.text = string(SeriesName) +"组 :
" + string(data_value) +" 间 ' "+ CategoryName + " '."
st_1.x = parent.PointerX()
st_1.y = parent.PointerY() - 65
st_1.visible = true
ELSEIF ISNULL(object_type) THEN
return
ElSE
MessageBox (Parent.Title, "请双击图形区查看信息")
END IF
if (Li_SeriesNbr > 0 and Li_ItemNbr > 0 ) then
IF (This.object.gr_1.GraphType <> '13' and &
This.object.gr_1.GraphType <> '17' ) THEN RETURN
Li_percent = 30
li_no = this.setDataPieExplode
("gr_1",Li_SeriesNbr,Li_ItemNbr,Li_percent)
li_no = this.GetDataPieExplode
("gr_1",Li_SeriesNbr,Li_ItemNbr,Li_percent)
end if
|