最近做了一个简单的数据库查询小软件,是老板一个项目的配套软件。需要将查询到的数据显示出来,然后打印。
开始使用Printer 对象是出于无奈,因为数据显示到viewlist后,无法进行直接打印(也许有方法,没有查到)。觉得Printer对象使用还要自己确定各种打印格式和位置等,不方便(本来VB使用就是为了方便)。
使用后了解到的东西:
1.每一次使用Print方法后,Printer对象都会自动换行,即currentY会自动增加,增加的距离就是打印前一行的高度。
2.如果一列要打印多个字符串,可以单独指定currentX和currentY,以确保它们保持在同一行上。
3.在运行时可以修改的属性有:纸大小的设定,打印方向,字体和颜色等。
4.在打印结束后,不要忘记用EndDoc结束打印。
5.其他:很多东西可以在MSDN上查到,反而是有些网上发布的东西不太可信,有的拿来完全就是错的,对自己发的东西一点都不负责任,联想到最近都在批斗的“学术腐败”……
最后,附上一点最简单的打印代码,有需要的朋友可以自己在上面修改,增加自己需要的功能
--数据定义就没有写上去了,个别部分加了点注释,方便阅读
Printer.FontSize = 19.2
DataTitle = "XXXXXXXX"
Pageheader = 25
Pagefooter = 25
Pageleft = 20
Pageright = 20
With Printer
.PaperSize = vbPRPSA4 ' 设置为A4纸
.ScaleMode = vbMillimeters
.FontBold = True
.ScaleLeft = -20
.ScaleTop = -25
.ScaleWidth = 210
.ScaleHeight = 297
UseWidth = .ScaleWidth - Pageleft - Pageright
UseHeight = .ScaleHeight - Pageheader - Pagefooter
.CurrentX = 0
.CurrentY = 0
.DrawWidth = 5
End With
'打印标题
With Printer
.FontSize = 20
.CurrentX = (UseWidth - .TextWidth(DataTitle)) / 2
.CurrentY = Pageheader + .ScaleTop
End With
Printer.Print DataTitle
Printer.FontSize = 10
Printer.CurrentX = Pageleft + Printer.ScaleLeft
startyline = Printer.CurrentY
DataRow = ""
With Printer
'打印字段名
.CurrentY = .CurrentY + 15
Y = .CurrentY
For N = 0 To RS.Fields.Count - 2
.CurrentX = (UseWidth / RS.Fields.Count) * N + Pageleft
.CurrentY = Y
SectionPos(N) = .CurrentX
Printer.Print IIf(IsNull(RS.Fields(N + 1).Name),"",RS.Fields(N + 1).Name)
Next
.CurrentX = SectionPos(0)
Printer.Print DataRow
'打印每行数据
Do While .CurrentY <= .ScaleHeight - Pagefooter
DataRow = ""
Y = .CurrentY
For N = 0 To RS.Fields.Count - 2
.CurrentX = SectionPos(N)
.CurrentY = Y
Printer.Print IIf(IsNull(RS.Fields(N + 1).Value),RS.Fields(N + 1).Value)
Next
RS.MoveNext
If RS.EOF <> True Then
Else
Exit Do
End If
Loop
.EndDoc
End With
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/superbert/archive/2006/03/13/623305.aspx