惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
Attack and Defense Labs
Attack and Defense Labs
V2EX - 技术
V2EX - 技术
O
OpenAI News
S
Secure Thoughts
H
Heimdal Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Schneier on Security
Schneier on Security
H
Hacker News: Front Page
S
Security Affairs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
The Register - Security
The Register - Security
GbyAI
GbyAI
Cloudbric
Cloudbric
MongoDB | Blog
MongoDB | Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
The Cloudflare Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Webroot Blog
Webroot Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
T
Tor Project blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
V
V2EX
T
Tailwind CSS Blog
SecWiki News
SecWiki News
NISL@THU
NISL@THU
C
Check Point Blog

博客园 - helloxuxu

简介DOMINO内置域和CGI变量 Domino系统中B/S下附件链接的处理方法 如何在Domino中使用文本文件注册用户 IBM Lotus Notes/Domino技术知识文档汇总 (2008) NOTES.INI 設定 给Domino系统管理员的十二项建议 用代码设置Excel单元格的格式 - helloxuxu - 博客园 给Domino系统管理员的十二项建议 Javascript中没有自带的将字符转换成日期型的函数 ABAP 函数 WebSphere Application Server v6中的问题诊断以及日志策略 如何在Web上執行不同欄位類型的欄位驗證? Lotus Notes常见问题答疑 DB1访问DB2 在VB6中导出EXCEL,FOXPRO,PRODOX格式的表 如何将A文档的附件拷贝的B文档中 查询 SAP ABAP程序优化方法(搜集自论坛) 用 LotusScript 实现 Excel 报表的自动生成和操作
谈谈Visual Basic应用程序的几种打印方法
helloxuxu · 2007-06-07 · via 博客园 - helloxuxu

谈谈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打印模块。

打印

是编程工作中重要的一部分,总的来说,微软已经使

打印

变得极为简便,但还要我们做一些必须的工作。希望本文能够拓展你编程的思路,编出更好的应用程序。