hubdog的宝典看了吗?
节选://来自hubdog
中国式的报表很变态,各种各样的框线,不同的间距,
斜线什么什么的很头疼的说,以前曾经看过一个医院的报表
各种无规则线条遍布简直象城市规划图,呵呵
而目前好像也没有什么特别方便的画中国式报表的控件
好一点的如ReportBuilder,FastReport, AcerReport等等
大多属于有版权限制而且使用也不是很容易,
而对此问题偶的解决方法无非是两种,
一是在word/excel里面生成报表模板,
然后程序通过VBA调用之,生成报表,预览、打印
这样做出来的报表非常PP,也很灵活,但是需要对方有OFFICE
开发者对OFFICE VBA也必须有一定认识,中文版的OFFICE
都带有详细的VBA编程说明,有兴趣在这方面下功夫的朋友
可以研究一下,这里就不再罗嗦了……
另外一种解决方法也是我比较喜欢的方法是编写专门的控件
因为实在没有时间精力开发一套通用控件,也不知道是否真的能
开发出这样一套通用控件,因此偶一般是针对项目的要求
编写定制报表控件,其实只要知道了大概的步骤,
编写这样一个控件非常简单,而且方便
下面就以一个简单的报表的例子简述一下
(因为删去一些适应特殊要求的代码,控件功能比较简单
不过刚刚适合做演示用
首先,一个QuickReport控件必须继承自TQRPrintable类
比如TQRTable = class(TQRPrintable)
其次,有两个方法必须重载,如
procedure Paint;
override;
procedure Print(OfsX, OfsY : Integer);
override;
Paint负责设计时显示控件,而Print负责预览、打印时将
报表画在打印机上,打印机被QuickReport控件封装在一个
QRPrinter对象中,通过QRPrinter.Canvas可以直接在打印机上画
出你的报表
因此你就当作是在一块白布上画图好了,呵呵
另外在控件编写中注意打印机的Font, Pen, Brush必须自行保存设置
因为你的报表上不只你一个控件,其他控件会修改这些对象
最后还有一些需要注意的,如显示和打印时的画表代码可以共用,
建议将之独立出来,但要注意打印时偏移的处理箜
另外中国式报表经常出现列的特殊定义,建议用一个TCollection
的子类来处理,这样可以实现设计时手工调整,具体实现见下面示例
下面是一个简单的例子,因为原来编写时时间赶得比较紧
代码没有注释,风格也不是很好,大家不要学偶,呵呵
虽然删去了一些功能,但是基本上还是一个完整的
贴出来给希望在这方面做工作的朋友做个参考
其实大概看一下就会发现很简单的说,QuickReport也有源代码在网上
可以下载到,记得cn-ftp.dhs.org以前好像有……
想到哪里写到哪里,没有什么条理,请见谅,有什么不清楚的
或者偶有什么错误需要指出的请re此文