在VB下使用Printer对象使用心得
2010-03-28 22:07
225 查看
最近做了一个简单的数据库查询小软件,是老板一个项目的配套软件。需要将查询到的数据显示出来,然后打印。
开始使用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
开始使用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
相关文章推荐
- vb(1) printer对象使用
- VB.NET中使用SQL Server分布式管理对象(SQL-DMO)
- 使用QTP9.0的一点心得——对象仓库
- [2004-8-4]VB.Net学习笔记,使用ADO.Net对象访问数据库,将结果写入ListView
- VB编写各类COM对象(特别是ASP)时,如何让外部对象使用含有可选参数的函数
- 在VB和Web页面中使用Shell对象
- VB串口使用心得两则
- VB 6.0 使用ADODB对象
- VB使用ADO对象链接数据库
- VB中使用ASP对象实例
- VB Printer对象
- 使用XmlSerializer将对象序列化至XML文件中(VB.NET)
- VB APP对象属性一览表+灵活使用VB的APP对象
- 在VB中使用文件对象
- VB串口使用心得两则
- VB中使用字典存储类对象
- [使用心得] 利用按键精灵批量删除pdf中的水印 V2:用于页面内对象数量不定时删除最后一个对象
- VB中使用ASP对象实例
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- Excel对象模型的一些使用心得(C#)