一. 概述
几乎所有数据库应用软件,都需要打印单证和报表。常见的方法是利用VB的Crystal Reports(水晶报表)方式,通过TextBox等数据绑定控件,调用Print方法直接输出。虽然Crystal Report这一个功能强大、样式丰富且无编程方式的报表编制程序能适应大部分单证、报表打印的需要,但是Crystal Reports引擎是一个动态链接库,需许多文件支持和调用更多系统资源,大大增加系统负担。
另一种解决办法是通过Printer对象的Print方法,直接打印字符串。这虽然减少了系统资源的开销,但它不能直接用于打印复杂的单证和报表。本文通过两个实例,阐述一个通用折行打印程序的编程和在单证及报表的应用。
二. 编程实现及实例
为便于阐述的方便,我们先建立一个Access数据库Standards.mdb,其内SN表由以下几个字段组成:
标准号(文本,17)
标准名称(文本,255)
英文名称(文本,255)
实施日期(日期,8)
修定日期(日期,8)
发布日期(日期,8)
代替标准(文本,50)
通用折行打印程序编制操作如下:
1.在VB5.0编程环境中,新建一个工程Project1;
2. 在Project1中添加Moduel,在Moduel模块中定义一个记录最大折行数的公用变量Rowlab和Function函数(以下程序都经过实际运行测试,可以原样复制使用);
Public rowlab As Integer '定义一个公用变量 Function prnt11(X As Integer, Y As Integer,Font As Single, Txt As String, Val As Integer) Dim str As String, str1 As String, str2 As String ,i As Integer Printer.CurrentX = X Printer.CurrentY = Y Printer.FontBold = False Printer.FontSize = font str = txt str2 = str i = 0 rowlab = 0 If Len(Trim(str)) = 0 Then rowlab = 1 ’待打印字符串为空的标志 Else Do While Len(str) > 0 Printer.CurrentX = X Printer.CurrentY = Y + rowlab * 240 rowlab = rowlab + 1 If Len(str) >= val Then str1 = Mid(str, 1, val) Printer.Print str1 i = i + 1 str = Mid(str2, i * val + 1) Else Printer.Print str Exit Do End If Loop End If End Function