

























谈谈Visual Basic应用程序的几种
打印方法
转载自《计算机世界日报》 (文/马德刚)
是编制应用程序过程中最复杂的事情之一,不同的
打印机提供了各种不同的功能。编写能充分利用
打印机性能的子程序与编写应用程序的其它部分一样都很困难。庆幸的微软的Windows平台使
打印工作变得相对容易了
最近,笔者编制出一套综合试题库管理系统,完成试题的编辑、自动组卷及
试卷等工作,在编程时,也碰到了
打印问题,笔者找到了几种
打印方法,现将它们整理出来,以飧读者,希望能给您的工作提供一点方便。
一、采用Visual Basic提供简单的
函数PrintForm方法
应用程序窗体的PrintForm方法时,Visual Basic把窗体的位图送到当前
机。该方法的优点在于它几乎不需要任何编程,但也有很大缺陷。最为突出的是当低分辨率图形在高分辨率
打印机上
打印时,其结果令人无法满意,会产生锯齿。下面代码将在
打印机上
打印窗体。
Private Sub Command1_Click() '用PrintForm打印 Me.PrintForm '打印窗体的可见区域End Sub 二、用Printer对象
用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属性用于定义
的副本数目。
三、采用直接将数据传送
机的方法进行
打印输出
该方法也不太实用。有两种方法将数据送往
机。第一种是用Print # 方法,就象将数据写入一个文件一样写数据。另一种方法写端口,但不是送文本,而是送特定的PCL语言,PCL表示
打印控制语言(Print Control Language)。它是一种特殊语言,用转义代码来控制
打印机的具体动作。因为此方法太繁琐,本文不做太多介绍,见谅。
四、使用RichTextBox控件的SelPrint方法
如果你在编程时用到了RichTextBox控制,那么你可以使用该控件的SelPrint 方法来
,使用非常简单。下面一段代码即用RichTextBox控件的SelPrint 方法来完成
打印。
Private Sub Command3_Click() 'SelPrint方法CommonDialog1.Flags = cdlPDReturnDC + cdlPDNoPageNumsIf RTF1.SelLength = 0 Then 'RTF1为窗体的RichTextBox控制CommonDialog1.Flags = CommonDialog1.Flags + cdlPDAllPages ElseCommonDialog1.Flags = CommonDialog1.Flags + cdlPDSelection End If CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowPrinter If Err.Number = cdlCancel Then Exit Sub If Err.Number < > 0 Then Beep MsgBox "Error printing file." & vbCrLf + Err.Description, vbOKOnly + vbExclamation, "Printing Error!" Exit Sub End If Printer.Print ""RTF1.SelPrint CommonDialog1.hDC '打印RTF1控件的可见区域End Sub 上面代码先进行打进设置,再进行
。如果不需要设置,采用下面代码更为简单。
RTF1.SelPrint Printer.hDC '打印RTF1控件的可见区域
五、可以在VB中调用Word 97提供的OLE自动化服务
利用Word 97强大的
功能来完成VISUAL BASIC打印,笔者认为这是最令人满意的方法。下面代码说明VB如何与Word集成。
Private Sub Command4_Click() '调用Word打印 Dim objWord As Object Const CLASSOBJECT = "Word.Application" On Error GoTo objError Set objWord = CreateObject(CLASSOBJECT) objWord.Visible = True objWord.Documents.Add With objWord.ActiveDocument.Paragraphs.Last.Range.Bold = False.ActiveDocument.Paragraphs.Last.Range.Font.Size = 20.ActiveDocument.Paragraphs.Last.Range.Font.Name = "黑体".ActiveDocument.Paragraphs.Last.Range.Font.ColorIndex = 4.ActiveDocument.Paragraphs.Last.Range.Text = "我是计算机世界读者!" End WithClipboard.ClearClipboard.SetText "通过剪切板向WORD传送数据!" objWord.Selection.Paste objWord.PrintPreview = True '预览方式 'objWord.PrintOut'执行
'objWord.Quit'退出Word Exit SubobjError: If Err < > 429 Then MsgBox Str$(Err) & Error$Set objWord = Nothing '不能创建Word对象则退出 Exit Sub Else Resume Next End IfEnd Sub 六、用VC编制DLL模块完成
打印在VISUAL BASIC中调用该模块的混合编程的方法进行
打印输出。因涉及VC编程比较繁琐,因篇幅问题这里不再讨论,但可以肯定用VC编制的
打印将更具特色。
笔者的试题库采用的是第五和第六两种方案,如果机器上没有Word ,就调用DLL打印模块。
是编程工作中重要的一部分,总的来说,微软已经使
打印变得极为简便,但还要我们做一些必须的工作。希望本文能够拓展你编程的思路,编出更好的应用程序。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。