社区
VB基础类
帖子详情
100分求printer对象的参考。在线等待!!
mybios
2002-08-22 04:19:32
如题!
...全文
33
8
打赏
收藏
100分求printer对象的参考。在线等待!!
如题!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
heimayi
2002-08-22
打赏
举报
回复
用printer对象打印表格
用msflexgrid控件显示的表格,要将它打印出来,最简单的方法是用printform方法,然而这只适合于数据正好能被屏幕显示的,即数据量少的,而且这种打印效果很差。而用printer对象进行打印编程,虽然麻烦点,但效果却是相当不错的,你可以自定义打印格式,打印页数,表格的粗细,字体大小等。实际上用printer对象进行打印编程是比较简单的。
下面我就用一实例来说明:
打印的内容是一张数据表,这里就只有两列数据,包括标题,副标题。(用A4纸打印)
假设数据处在C_DataArray(),和R_DataArray()中C_Name与R_Name分别为两数据项的字段名
Public Sub Printtable()
'初始化
Dim printer1 as Printer
Dim pageheader
Dim pagefooter
Dim pageleft
Dim pageright
Dim usewidth
Dim useheight
Dim i, j, k As Integer
Dim word As String
Dim startx
Dim starty
Dim startyline ‘ 用来纪录打印竖线的起点
Dim endyline ’ 用来纪录打印竖线的末点
设置页面参数
pageheader = 25
pagefooter = 25
pageleft = 20
pageright = 20
With printer1
.PaperSize = 9
.ScaleMode = 6
.FontBold = True
.ScaleLeft = -20
.ScaleTop = -25
.ScaleWidth = 210 '设置为A4纸
.ScaleHeight = 297
usewidth = .ScaleWidth - 40
useheight = .ScaleHeight - 50
.CurrentX = 0
.CurrentY = 0
.DrawWidth = 5
End With
'打印标题
With printer1
.FontSize = 20
.CurrentX = (usewidth - .TextWidth(DataTitle)) / 2
.CurrentY = pageheader + .ScaleTop
End With
printer1.Print DataTitle
'打印副标题
printer1.FontSize = 15
word = DataTitle2
printer1.CurrentX = usewidth - printer1.TextWidth(word)
printer1.Print word
'打印第一条线 Line方法不能用在with ....end with里
printer1.CurrentX = pageleft + printer1.ScaleLeft
startyline = printer1.CurrentY
'线宽
printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
printer1.FontSize = 10
'printer1.Print vbLf
printer1.CurrentY = printer1.CurrentY + 1
'打印第一个字段名
starty = printer1.CurrentY
printer1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_Name)) / 2
printer1.Print C_Name
'打印第二个字段名
printer1.CurrentX = usewidth / 2 + ((usewidth / 2 - printer1.TextWidth(R_Name)) / 2)
printer1.CurrentY = starty
printer1.Print R_Name
printer1.CurrentY = printer1.CurrentY + 1
'打印数据和横线,rownum为数据行数
For i = 1 To rownum
'判断是否该页已打满
If printer1.CurrentY >= useheight Then
'打印横线
printer1.CurrentX = printer1.ScaleLeft + pageleft
printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
printer1.CurrentY = printer1.CurrentY + 1
'打印三条竖线
endyline = printer1.CurrentY
printer1.Line (0, startyline)-(0, endyline)
printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline)
printer1.Line (usewidth, startyline)-(usewidth, endyline)
'打印页号
With printer1
.CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft
.CurrentY = useheight + 3
End With
printer1.Print printer1.Page
printer1.NewPage
With printer1
.CurrentX = pageleft + .ScaleLeft
.CurrentY = pageheader + .ScaleTop
startyline = .CurrentY
End With
End If
'打印一行数据
printer1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_DataArray(i))) / 2
starty = printer1.CurrentY
printer1.Print C_DataArray(i)
printer1.CurrentX = (printer1.ScaleWidth - 40) / 2 + ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(R_DataArray(i) )) / 2
printer1.CurrentY = starty
printer1.Print R_DataArray(i)
printer1.CurrentY = printer1.CurrentY + 1
Next i
'打印最后一条横线
printer1.CurrentX = printer1.ScaleLeft + pageleft
printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
endyline = printer1.CurrentY
'打印三条竖线
printer1.Line (0, startyline)-(0, endyline)
printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline)
printer1.Line (usewidth, startyline)-(usewidth, endyline)
'打印页号
With printer1
.CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft
.CurrentY = useheight + 3
End With
printer1.Print printer1.Page
printer1.EndDoc
end sub
mybios
2002-08-22
打赏
举报
回复
谢谢!结贴!
DLSTORY
2002-08-22
打赏
举报
回复
用Printer对象可以进行高分辨率输出,但要想产生复杂的打印输出,编程较为繁琐。Printer对象代表系统确省的打印机。Printer对象支持许多由窗体和图形框所支持的属性和方法,三种对象都有画线和画方框。应用程序可用以下列代码在Printer对象上画出一平方英寸的方框。它离左上角二英寸。注意:打印机以twips来测量距离。每英寸有1440个twips。
Printer.Line(2*1440,2*1440)-Step(1440,1440), ,B
---- 打印机、从窗体和图形框都有Circle、PaintPicture、Print、Pset、TextHeight、TextWidth方法。使用这些方法,应用程序可以为打印机生成高分辨率输出。
---- 打印文本直接用Print方法,见下列代码:
---- Printer.Print “Hello,China ComputerWorld!” ‘打印字符串
---- Printer对象还有一些窗体和图形框都没有方法:
---- NewPage告诉打印机,程序对当前输出页的发送已经结束。Printer对象应开始新的一页。
---- EndDoc告诉VISUAL BASIC,程序创建文档结束。VISUAL BASIC应将它发送到物理打印机上打印。
---- KillDoc取消当前打印作业。应用程序应该终止由EndDoc和KillDoc所设定的每个打印作业。
---- Zoom属性用于定义打印输出的缩放因子。
---- Copies属性用于定义打印的副本数目。
no_com
2002-08-22
打赏
举报
回复
网易/北京社区/vb/精华区/技术文章/打印/..........
mybios
2002-08-22
打赏
举报
回复
帮忙找找!因为我需要实现后台打印的功能
ilang
2002-08-22
打赏
举报
回复
关注
mybios
2002-08-22
打赏
举报
回复
我知道这样可以查啊。但我想看看中文版的东西。我英文不行啊。。。。
water_j
2002-08-22
打赏
举报
回复
可以查一下MSDN或用VB的对象浏览器查看,按<F2>输入PRINTER
Windows 脚本技术
参考
手册
Windows 脚本技术
参考
手册(CHM) 目录: Windows 脚本技术 <br> Windows 脚本技术 <br> JScript VBScript 脚本运行时 <br> Dictionary
对象
FileSystemObject
对象
脚本 Encoder ...
API之网络函数---整理网络函数及功能
Add
Pr
inte
r 在系统中添加一台新打印机 Add
Pr
inte
rConnection 连接指定的打印机 Add
Pr
inte
rDriver 为指定的系统添加一个打印驱动程序 Add
Pr
int
Pr
ocessor 为指定的系统添加一个打印处理器 Add
Pr
int
Pr
ovidor 为系统...
Linux操作系统基础教程
分软件都是由 GNU倡导发展起来的,所以软件通常都会在附着 GNU Public License(GPL) 的情况下被自由传播。GPL 是一种可以使你免费获得自由软件的许可证,因此 Linux 使用 者的使用活动基本不受限制(只要你不将它...
补丁模块(带源码)InlinePatch,Hook,内存DLL注入等等
下面这个模块是我使用易语言时写补丁最常用的一个模块(当然很多也是抄的),一开始我觉得bug肯定会很多,放出去肯定又会坑很多人,后来我发现坑坑更健康,当你明白一个东西的优缺点之后,你才会更好的选择你所需要...
域控制器常用组策略功能配置说明
Windows 无法应用 Deployed
Pr
inte
r Connections 设置。Deployed
Pr
inte
r Connections 设置可能具有自身的日志文件。请单击“详 细信息”链接 限制windows更新 限制windows版本 禁止使用USB存储设备 通过域控制器...
VB基础类
7,763
社区成员
197,609
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章