万能打印 如何实现用户自定义打印(例如GRID中有20各字段,用户可选择某些字段打印)--请详细说明 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的建议是:另建一个表,存放要打印的字段的汉字翻译,字体格式大小等。然后在打印的时候,将该表的类容取出,先用api函数划线在打印标题,然后,在逐行打印dbgrid中的类容在划线 有个easygrid控件,不知道能不能满足你的要求; 功能更加强劲,增加多行表头的功能,新增更多事件,加强了打印期间对报表样式的控制,可随意改变打印内容。下载地址:http://www.csdn.net/cnshare/soft/15/15471.shtmreprint 使用说明本控件可打印 datasource,dbgrid,stringgrid.一 、控件属性:1、colstitle 设置报表的列标题属性 (1) Print:boolean;是否打印 (2) Font:tfont;字体 (3) Rowsline:tpen;横线样式 (4) Colsline:tpen;竖线样式 (5) Alignment:talignment;对齐方式 (6) Rowspace:integer;行间距 (7) EveryPage:boolean;是否每页打印 (8) EveryRow:boolean;是否每行打印 (9) titlearray:tstrings;怎加标题组 (使用方法见附带demo) (10) rows:integer;设置默认列标题打印行数2、datasource 绑定 datasource 3、dbgrid 绑定 dbgrid4、stringgrid 绑定 stringgrid PrintObject 选择打印的对象(datasource 、dbgrid、 stringgrid )5、pagefooter 页脚 pageheader 页眉 (1) Text:string;内容 (2) Font:tfont;字体 (3) Print:boolean;是否打印 (4) Alignment:talignment;对齐方式6、detail 设置要打印的明细数据属性 (1)arrange 设置明细字段排列方向 Horizontal 横向打印(默认的一般打印) Vertical 竖向打印(字段竖向排列适合打印字段内容较长的报表如“会议纪录”) (2)aotureturn 打印明细字段时,如果字段超过列的宽度是否允许自动换行 (3)colsline 设置竖线属性引用tpen类 (4)footer 设置明细尾 (设置同pagefooter 页脚 pageheader 页眉) (5)frame 设置明细边框属性引用tpen类 (6)head 设置明细头(设置同pagefooter 页脚 pageheader 页眉) (7)rowsline 设置横线属性引用tpen类 (8)rowspace 设置明细行的高度 (9)top 明细与标题的距离 (10)Alignment对齐方式7、page 设置纸张 (1) leftmargin:real;左边距 (2) rightmargin:real;右边距 (3) topmargin:real;顶边距 (4) bottommargin:real;底边距 (5) pagesize:TPageSize;纸张类型 (6) Height:real;高度 (7) width:real;宽度 (8) Orientation:TPrinterOrientation;打印方向注意:设置纸张的宽度和高度需把pagesize设为Custom8、title 设置标题 (1) Print:boolean; 是否打印 (2) Text:tstrings; 内容可设置多行 (3) Font:tfont;字体 (4) Alignment:talignment;对齐方式 (5) top:integer; 距纸张顶部距离 (6) Rowspace:integer;行距 (7) EveryPage:boolean;是否每页打印二 、控件方法: (1) preview 预览(2) print 打印(3) SaveToFile() 保存为报表文件(4) SaveToStream() 保存为流(然后就可把整个报表存到数据库了很方便哦! ~_~)(5) PrintFile() 打印报表文件(6) PrintStream() 打印流(流的数据库存取就不用多说了吧)(7) PreviewFile() 预览文件(8) PreviewStream() 预览流 (9) OptionToStream() 报表的属性保存为流 (10) OptionFromStream() 从流中得到报表属性(11) OptionPost()在打印期间改变了报表属性,要想立即生效调用此方法。(12) PaintText(Text:string) 覆盖原有打印的字符,一般在能返回当前打印的内容的事件中使用。(见控件事件)三、 控件事件: (1) AfterPrint 打印后 (2) BeforePrint 打印前 (3) OnPrintDetail(RecordNumber: Integer)在打印每一栏明细前触发此事件, 返回参数:RecordNumber返回当前打印行数。 (4) OnPrintDetailField(RecordNumber,FieldIndex: Integer; FieldText: String); 在打印明细的每个字段都会触发此事件。 返回参数:RecordNumber返回当前打印行数。 FieldIndex 字段索引 FieldText字段内容 (5) OnPrintTitle(Row: Integer; Text: String)打印每行标题都会触发此事件。 返回参数:row当前打印的行 Text当前打印的内容 (6) OnPrintColsTitleField(Row, FieldIndex: Integer; FieldName: String); 打印列标题字段时触发此事件 返回参数:row当前打印的行 FieldIndex当前打印的字段索引 FieldName当前打印的字段名称 (7) OnPrintColsTitle(Row: Integer) 打印每行列标题时触发此事件 返回参数:row当前打印的行 四、注意事项 (1) text 属性,输入“|#|”打印页码值,如果想打印页码可输入“第|#|页” 输入“|RecordCount|”打印 记录数 (2) 不同的打印机,打印和预览效果可能有一点点不同(保证数据打印完全正确一致)。本人用一台针式和一台激光打印机做测试, 开始差别较大后经过调试基本一致,不知其他打印机如何。 (3) 纸张大小以及横向、竖向自动适应系统默认也可设置。 (4) 各列的宽度按比例,适应纸张宽度打印。 我用fastreport和quickreport都做过,其它的报表系统也一样:在运行时,动态生成一个报表,动态创建数据栏和用户选择的数据项目,并设置各种属性再preview即可。 stringrid中的数据如何导出成文件文件啊。。 请问关于日期显示格式的问题? 关于声音的问题 try..except..end;各位老大,请说一下你们通常的用法, dephi7中找不到报表控件,是为什么? 动态创建组件,如何释放其...... 请教有关SQL SERVER 7.0数据库的启动问题? 请教DX用DELPHI读HEX文件 新人学习遇到的问题 请问如何打开.res文件,从而获得文件里的图标。 巨多分求助 帮助的制作 reedseutozte(haha),进来拿分!谢谢!(2)
先用api函数划线
在打印标题,然后,在逐行打印dbgrid中的类容
在划线
的控制,可随意改变打印内容。下载地址:http://www.csdn.net/cnshare/soft/15/15471.shtm
reprint
使用说明
本控件可打印 datasource,dbgrid,stringgrid.
一 、控件属性:1、colstitle 设置报表的列标题属性 (1) Print:boolean;是否打印
(2) Font:tfont;字体
(3) Rowsline:tpen;横线样式
(4) Colsline:tpen;竖线样式
(5) Alignment:talignment;对齐方式
(6) Rowspace:integer;行间距
(7) EveryPage:boolean;是否每页打印
(8) EveryRow:boolean;是否每行打印
(9) titlearray:tstrings;怎加标题组 (使用方法见附带demo)
(10) rows:integer;设置默认列标题打印行数
2、datasource 绑定 datasource
3、dbgrid 绑定 dbgrid
4、stringgrid 绑定 stringgrid
PrintObject 选择打印的对象(datasource 、dbgrid、 stringgrid )
5、pagefooter 页脚 pageheader 页眉
(1) Text:string;内容
(2) Font:tfont;字体
(3) Print:boolean;是否打印
(4) Alignment:talignment;对齐方式
6、detail 设置要打印的明细数据属性
(1)arrange 设置明细字段排列方向
Horizontal 横向打印(默认的一般打印)
Vertical 竖向打印(字段竖向排列适合打印字段内容较长的报表如“会议纪录”)
(2)aotureturn 打印明细字段时,如果字段超过列的宽度是否允许自动换行
(3)colsline 设置竖线属性引用tpen类
(4)footer 设置明细尾 (设置同pagefooter 页脚 pageheader 页眉)
(5)frame 设置明细边框属性引用tpen类
(6)head 设置明细头(设置同pagefooter 页脚 pageheader 页眉)
(7)rowsline 设置横线属性引用tpen类
(8)rowspace 设置明细行的高度
(9)top 明细与标题的距离
(10)Alignment对齐方式
7、page 设置纸张
(1) leftmargin:real;左边距
(2) rightmargin:real;右边距
(3) topmargin:real;顶边距
(4) bottommargin:real;底边距
(5) pagesize:TPageSize;纸张类型
(6) Height:real;高度
(7) width:real;宽度
(8) Orientation:TPrinterOrientation;打印方向
注意:设置纸张的宽度和高度需把pagesize设为Custom8、title 设置标题
(1) Print:boolean; 是否打印
(2) Text:tstrings; 内容可设置多行
(3) Font:tfont;字体
(4) Alignment:talignment;对齐方式
(5) top:integer; 距纸张顶部距离
(6) Rowspace:integer;行距
(7) EveryPage:boolean;是否每页打印二 、控件方法:
(1) preview 预览
(2) print 打印
(3) SaveToFile() 保存为报表文件
(4) SaveToStream() 保存为流(然后就可把整个报表存到数据库了很方便哦! ~_~)
(5) PrintFile() 打印报表文件
(6) PrintStream() 打印流(流的数据库存取就不用多说了吧)
(7) PreviewFile() 预览文件
(8) PreviewStream() 预览流
(9) OptionToStream() 报表的属性保存为流
(10) OptionFromStream() 从流中得到报表属性
(11) OptionPost()在打印期间改变了报表属性,要想立即生效调用此方法。
(12) PaintText(Text:string) 覆盖原有打印的字符,一般在能返回当前打印的内容的事件中使用。(见控件事件)三、 控件事件:
(1) AfterPrint 打印后
(2) BeforePrint 打印前
(3) OnPrintDetail(RecordNumber: Integer)在打印每一栏明细前触发此事件,
返回参数:RecordNumber返回当前打印行数。
(4) OnPrintDetailField(RecordNumber,FieldIndex: Integer; FieldText: String);
在打印明细的每个字段都会触发此事件。
返回参数:RecordNumber返回当前打印行数。
FieldIndex 字段索引
FieldText字段内容
(5) OnPrintTitle(Row: Integer; Text: String)打印每行标题都会触发此事件。
返回参数:row当前打印的行
Text当前打印的内容
(6) OnPrintColsTitleField(Row, FieldIndex: Integer; FieldName: String);
打印列标题字段时触发此事件
返回参数:row当前打印的行
FieldIndex当前打印的字段索引
FieldName当前打印的字段名称
(7) OnPrintColsTitle(Row: Integer)
打印每行列标题时触发此事件
返回参数:row当前打印的行
四、注意事项
(1) text 属性,输入“|#|”打印页码值,如果想打印页码可输入“第|#|页” 输入“|RecordCount|”打印 记录数
(2) 不同的打印机,打印和预览效果可能有一点点不同(保证数据打印完全正确一致)。本人用一台针式和一台激光打印机做测试,
开始差别较大后经过调试基本一致,不知其他打印机如何。
(3) 纸张大小以及横向、竖向自动适应系统默认也可设置。
(4) 各列的宽度按比例,适应纸张宽度打印。
在运行时,动态生成一个报表,动态创建数据栏和用户选择的数据项目,并设置各种属性
再preview即可。