在VB下使用Printer对象使用心得

    最近做了一个简单的数据库查询小软件,是老板一个项目的配套软件。需要将查询到的数据显示出来,然后打印。

    开始使用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

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值