1、修正了一些Bug,例如在没有启动打印服务的操作系统能够下,也能运行foxtable了。
2、开放了直接在单元格绘图的功能,使用方法请参考帮助文件“开发篇 - 专题 - 直接在单元格绘图”
在单元格中直接绘图
在介绍表事件DrawCell的时候,我们了解了通过更改文本和样式,让单元格的显示变得丰富多彩。
其实这只是DrawCell事件的最基础用法,在此之外,该事件还提供了通过GDI+绘图的功能。
DrawCell事件的完整e参数属性:
Table: 准备绘制的表
Row: 准备绘制的行
Col: 准备绘制的列
Style: 指定自定义样式的名称,如果用默认的样式绘制单元格,无须设置Style属性。
Text: 字符型,获得或者设置要绘制的文本内容
X: 要绘制单元格的水平坐标位置,单位为像素
Y: 要绘制单元格的垂直坐标位置,单位为像素
Width: 要绘制单元格的宽度,单位为像素
Height: 要绘制单元格的高度,单位为像素
Graphics:返回一个Graphics对象,通过这个对象可以在单元格中绘制图形。
此外该事件的e参数还提供了两个方法:
StartDraw:开始绘图
EndDraw: 结束绘图
所有的绘图代码,必须在这两个方法之间。
示例
此示例可以参考CaseStudy目录下的文件“单元格绘图.Table”。
假定表中有两列,分别是项目和进度,希望能够直接在项目列的单元格中用条形图表示进度,DrawCell事件的代码为:
If
e.Col.Name = "进度" AndAlso e.Row.IsNull("进度") = False Then
e.StartDraw()
Dim Width As Integer = (e.Width - 2 )* e.Row("进度") \ 100
If e.Row("进度") = 100 Then
e.Graphics.FillRectangle(Brushes.Green,e.x + 1,e.y + 1, Width, e.Height - 2)
Else
e.Graphics.FillRectangle(Brushes.Red,e.x + 1,e.y + 1, Width, e.Height - 2)
End If
e.EndDraw()
End If
绘制出的效果为:
此主题相关图片如下:0987.gif

需要注意的是,在单元格绘制出的图形,只有直接打印才能打印出来,普通的打印无能为力。
[此贴子已经被作者于2009-1-14 19:03:21编辑过]