VB中打印机选择
使用 VBA 实现自动打印功能

使用 VBA 实现自动打印功能自动打印功能是一项非常方便的功能,可以使我们的工作更高效。
VBA(Visual Basic for Applications)是一种用于自动化和自定义Microsoft Office应用程序的编程语言。
在本文中,我们将探讨如何使用VBA实现自动打印功能。
首先,我们需要打开Microsoft Office应用程序,例如Microsoft Word或Microsoft Excel。
接下来,我们将编写一段简单的VBA代码,以便在特定条件下自动执行打印操作。
在VBA编辑器中,我们可以在需要实现打印功能的模块内编写以下代码:```Sub AutoPrint()Dim ws As WorksheetSet ws = ThisWorkbook.ActiveSheet' 定义打印的区域Dim printRange As RangeSet printRange = ws.Range("A1:E10") ' 设置打印属性With ws.PageSetup.PrintArea = printRange.Address.Orientation = xlPortrait.FitToPagesWide = 1.FitToPagesTall = FalseEnd With' 打印ws.PrintOut' 清除打印设置ws.PageSetup.PrintArea = ""End Sub```以上代码使用了Excel的对象模型来实现自动打印功能。
首先,我们在代码中定义了一个名为`AutoPrint`的子程序。
在这个子程序中,我们首先设置了当前活动的工作表对象,使用`ThisWorkbook.ActiveSheet`来获取当前工作表。
接下来,我们设置了需要打印的区域,以A1到E10作为示例。
您可以根据实际需求更改打印区域。
在代码的第11行,我们使用`ws.Range("A1:E10")`将要打印的区域赋值给了`printRange`对象。
VB打印技巧

ResetPrinterOrientation Me'设为默认值Printer.Orientation=VbPRORPortrait'纵向打印Printer.Orientation=VbPRORLandscape'横向打印Printer.PaperSize=vbPRPSA4'定义纸张大小为A4设置打印页边距'你可以使用打印机的Scale属性来设置打印页边距。
下面的代码设置左边距为1/2英寸。
右边距为3/4英寸。
乘以1440是将英尺转换成twips。
Printer.ScaleLeft=-0.75*1440Printer.ScaleTop=-0.5*1440Printer.CurrentX=0Printer.CurrentY=0打印多页Rich Text打印对象在处理RichTextBox时由于忽视了Rich Text代码将不会工作得很好。
为了打印RichTextBox,要使用SelPrint命令,但是SelPrint不是非常得友好,它按照自己的方式打印然后产生退纸动作。
为了打印多页Rich Text,要找到每一页的开始和结束点,然后依此设置SelStart和SelLength,最后使用SelPrint打印出每一页。
以下是工作的每一个步骤:1、使用SaveFile命令保存编辑版本的文件。
2、转换编辑版本为打印版本:遍历这个文档,修改SelIndent和SelRightIndent的数值,使之适合于打印机(注意:编辑时的缩进数值对于屏幕是合适的,但不适用于打印机)。
做些其他的修改,比如:添加页眉,消除行号。
3、使用SelPrint循环一次打印一个页面。
这里,计算行数是一个技巧,找到LFCRs 是容易的,但是,也必须要计算一下行缠绕,它也算在了行统计中,以及绝对不允许发生的页面溢出情况。
4、使用SelRTF=""删除打印版本。
5、使用LoadFile重新启动编辑版本。
vb 打印 实例-概述说明以及解释

vb 打印实例-概述说明以及解释1.引言1.1 概述在VB中,打印是一项常见的功能需求,通过打印可以将软件中的数据输出到纸张上,使得用户能够方便地查看和保存信息。
本文将介绍VB 中的打印功能,并通过实例演示和分析来帮助读者更好地理解和应用这一功能。
在VB中,打印功能的实现主要通过使用PrintDocument组件来完成,PrintDocument组件可以方便地控制打印输出的内容和样式。
通过设置PrintDocument的PageSettings属性和PrintPage事件来指定打印页面的设置和内容。
另外,也可以使用PrintPreviewDialog组件来提供打印预览的功能,使得用户可以在打印前预览输出的效果,从而调整需要打印的内容和格式。
本文将通过实例演示和分析来介绍如何在VB中实现打印功能,希望能帮助读者更加深入地了解和掌握这一重要的功能。
文章结构部分主要包括文章的大致组织和内容安排,旨在帮助读者更好地理解整篇文章的逻辑结构。
本文的文章结构如下:1. 引言1.1 概述:介绍VB打印功能的重要性和应用背景1.2 文章结构:介绍本文的大纲和各部分内容安排1.3 目的:阐明撰写本文的意义和目的2. 正文2.1 VB打印功能介绍:详细介绍VB语言中的打印功能的基本原理和特点2.2 VB打印实例演示:通过具体的实例演示,展示VB打印功能的具体应用和使用方法2.3 VB打印实例分析:对演示的实例进行分析和总结,深入探讨其应用场景和优势特点3. 结论3.1 总结:对整篇文章进行总结,强调VB打印功能的重要性和价值3.2 应用推广:探讨VB打印功能在实际应用中的推广和发展前景3.3 展望:展望未来VB打印功能的发展方向和潜力通过以上结构,读者可以清晰地了解本文的逻辑结构和内容安排,有助于他们更好地理解和消化文章所传达的信息。
1.3 目的:本文的目的在于介绍如何在VB(Visual Basic)中使用打印功能,并通过实例演示和分析,帮助读者更好地了解如何在自己的程序中实现打印功能。
vb控制打印机自动打印表格

VB控制EXCLE自动打印表格VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、VB读写EXCEL表:VB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2003),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:Dim excel As ObjectDim workbook As ObjectDim sheet As Object3、在程序中操作EXCEL表常用命令:Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件xlApp.Visible = True '设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表xlSheet.Cells(row, col) =值'给单元格(row,col)赋值xlSheet.PrintOut '打印工作表xlBook.Close (True) '关闭工作簿xlApp.Quit '结束EXCEL对象Set xlApp = Nothing '释放xlApp对象xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL 对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。
vb6设置打印机纸张类型以及打印方向

Printe r 对象常数打印机颜色模式常数值描述vbPRC MMono chrom e 1 单色输出vbPRC MColo r 2 彩色输出双面打印常数值描述vbPR DPSim plex1 单面打印vb PRDPH orizo ntal2 双面水平打印vbPRD PVert ical3 双面垂直打印打印方向常数值描述vbPR ORPor trait 1 文档打印以纸的窄边作顶部vbP RORLa ndsca pe 2文档打印以纸的宽边作顶部打印质量常数值描述vbPRP QDraf t -1草稿打印质量vb PRPQL ow -2低级打印质量v bPRPQ Mediu m -3中等打印质量vb PRPQH igh -4 高级打印质量Pape rBin属性常数值描述vbPRB NUppe r 1 从上层纸盒进纸vb PRBNL ower2 从下层纸盒进纸vbPR BNMid dle 3从中间纸盒进纸vbPRB NManu al 4等待手动插入每页纸vbPR BNEnv elope 5 从信封进纸器进纸vb PRBNE nvMan ual 6从信封进纸器进纸;但要等待手动插入vbPRB NAuto 7 (缺省方式)从当前缺省纸盒进纸vbPRB NTrac tor 8从拖拉进纸器供纸vbPR BNSma llFmt 9 从小型进纸器进纸vb PRBNL argeF mt 10从大型纸盒进纸vbPRB NLarg eCapa city11 从大容量进纸器进纸v bPRBN Casse tte 14 从附加的卡式纸盒进纸Paper Size属性常数值描述vbPRP SLett er 1信笺, 8 1/2 x 11 英寸v bPRPS Lette rSmal l 2 +A611小型信笺,8 1/2 x 11 英寸vb PRPST abloi d 3 小型报, 11 x 17 英寸v bPRPS Ledge r 4 分类帐, 17 x 11 英寸v bPRPS Legal 5 法律文件, 8 1/2 x 14 英寸v bPRPS State ment6 声明书,5 1/2 x 8 1/2 英寸v bPRPS Execu tive7 行政文件,7 1/2 x 10 1/2英寸vbPR PSA38 A3, 297 x 420 m mvb PRPSA4 9 A4, 210 x 297 mm vbPRP SA4Sm all 10 A4小号,210 x 297 mm vbPRP SA5 11 A5, 148 x 210 m mvb PRPSB4 12B4, 250 x 354 mmvbPR PSB513 B5, 182 x 257 mmv bPRPS Folio 14 对开本, 8 1/2 x 13 英寸v bPRPS Quart o 15四开本, 215 x 275 mmvbP RPS1&H14 16 10 x 14 英寸vbPRP S11x17 1711 x 17 英寸vb PRPSN ote 18 便条,8 1/2 x 11 英寸vb PRPSE nv9 19 #9信封, 3 7/8 x 8 7/8英寸vbPR PSEnv10 20 #10信封, 4 1/8 x 9 1/2英寸vbPR PSEnv11 21 #11信封, 4 1/2 x 10 3/8英寸vbP RPSEn v12 22 #12信封,4 1/2 x 11英寸vbP RPSEn v14 23 #14信封,5 x 11 1/2英寸vbP RPSCS heet24 C尺寸工作单v bPRPS DShee t 25D 尺寸工作单vbPR PSESh eet 26 E 尺寸工作单vb PRPSE nvDL27 DL型信封,110 x 220 mm vbPRP SEnvC3 29C3 型信封, 324 x 458 mmvbP RPSEn vC4 30 C4型信封,229 x 324 mmv bPRPS EnvC5 28 C5 型信封, 162 x 229 mmvbPR PSEnv C6 31 C6 型信封, 114 x 162 m mvb PRPSE nvC65 32 C65 型信封,114 x 229 mmv bPRPS EnvB4 33 B4 型信封, 250 x 353 mmvbPR PSEnv B5 34 B5 型信封,176 x 250 mm vbPRP SEnvB6 35B6 型信封, 176 x 125 mmvbP RPSEn vItal y 36信封, 110 x 230 mmvbPR PSEnv Monar ch 37信封大王,3 7/8 x 7 1/2英寸vbP RPSEn vPers onal38 信封,3 5/8 x 6 1/2英寸vbP RPSFa nfold US 39 U.S.标准复写簿, 14 7/8 x 11英寸vbPR PSFan foldS tdGer man 40 德国标准复写簿, 8 1/2 x 12英寸vbPR PSFan foldL glGer man 41 德国法律复写簿, 8 1/2 x 13英寸vbPR PSUse r 256用户定义vb6设置打印机纸张类型,以及打印方向[转]2008-08-0818:02:13|分类:vc 学习 | 标签:无|字号大中小订阅.这段时间在做一个报表系统,其中在批量打印的时候需要自动设置打印纸张和打印方向,这就需要在打印前控制打印机,对其进行设置.整了半天,终于整出来一个打印模块,直接控制打印机对其进行设置'--------------------------------------------------------------------------------' 版本号: Ver1.0'功能 :设置打印机纸张类型,以及打印方向'--------------------------------------------------------------------------------O ption Expl icitPriv ate C onstCCHDE VICEN AME = 32P rivat e Con st CC HFORM NAME= 32'控制打印机权限Priva te Co nst S TANDA RD_RI GHTS_REQUI RED = &HF0000P rivat e Con st PR INTER_ACCE SS_AD MINIS TER = &H4Priva te Co nst P RINTE R_ACC ESS_U SE =&H8P rivat e Con st PR INTER_ALL_ACCES S = P RINTE R_ACC ESS_U SE'C onsta nts used to ma ke chang es to the valu es conta ined in the De vMode Priv ate C onstDM_MO DIFY= 8P rivat e Con st DM_IN_B UFFER = DM_MODI FYPr ivate Cons t DM_COPY= 2P rivat e Con st DM_OUT_BUFFE R = D M_COP YPri vateConst DM_D UPLEX = &H1000&'打印机送纸方向Priv ate C onstDMDUP_SIMP LEX = 1Pr ivate Cons t DMD UP_VE RTICA L = 2Priv ate C onstDMDUP_HORI ZONTA L = 3Priv ate C onstDM_OR IENTA TION= &H1&Pri vateConst DM_P APERS IZE = &H2&Pri vateTypeDEVMO DE dmDe viceN ame As S tring * CC HDEVI CENAM EdmSpe cVers ion As I ntege rdmDri verVe rsion As Inte ger dmS ize As I ntege rdmDri verEx tra As I ntege rdmFie lds As L ong dmO rient ation As Inte ger dmP aperS ize As I ntege rdmPap erLen gth As I ntege rdmPap erWid th As In tegerd mScal e A s Int eger dm Copie s A s Int eger dm Defau ltSou rce As I ntege rdmPri ntQua lity AsInteg er dmCo lor As I ntege rdmDup lex As I ntege rdmYRe solut ion As I ntege rdmTTO ption As Inte ger dmC ollat e A s Int eger dm FormN ame As S tring * CC HFORM NAME dm LogPi xels AsInteg er dmBi tsPer Pel As L ong dmP elsWi dth As L ong dmP elsHe ight AsLong dm Displ ayFla gs As Lo ng dmDi splay Frequ ency AsLong dmI CMMet hod As L ong ' // 仅供Wi n95 dmI CMInt ent As L ong ' // 仅供Wi n95 dmM ediaT ype As L ong ' // 仅供Wi n95 dmD ither Type AsLong ' // 仅供Win95 dmRe serve d1 As Lo ng ' // 仅供Win95 dmRes erved2 A s Lon g ' // 仅供Win95 End Type'打印机使用初始化结构体P rivat e Typ e PRI NTER_DEFAU LTS pDa taTyp e A s Str ing pDe vMode As LongD esire dAcce ss As Lo ngEn d Typ eEnu m Pag eDire ction纵向打印= 1横向打印 =2End Enum'打印机控制AP IPri vateDecla re Fu nctio n Ope nPrin ter L ib "w inspo ol.dr v" Al ias _ "Op enPri nterA" (By Val p Print erNam e AsStrin g, _ phP rinte r AsLong, _pDefa ult A s PRI NTER_DEFAU LTS)As Lo ngPr ivate Decl are F uncti on Se tPrin ter L ib "w inspo ol.dr v" Al ias _ "Se tPrin terA" (ByV al hP rinte r AsLong, _ ByV al Le vel A s Lon g, _p Print er As Any, _ ByV al Co mmand As L ong)As Lo ngPr ivate Decl are F uncti on Ge tPrin ter L ib "w inspo ol.dr v" Al ias _ "Ge tPrin terA" (ByV al hP rinte r AsLong, ByVa l Lev el As Long, _ pP rinte r AsAny,_ ByVa l cbB uf As Long, _ pc bNeed ed As Long) AsLongPriva te De clare SubCopyM emory Lib"kern el32" Alia s _ "Rtl MoveM emory" (hp vDest As A ny, _ hp vSour ce As Any, _ByVal cbCo py As Long)Pri vateDecla re Fu nctio n Clo sePri nterLib "winsp ool.d rv" (ByVal hPri nterAs Lo ng) A s Lon gPri vateDecla re Fu nctio n Doc ument Prope rties Lib"wins pool.drv"Alias _ "D ocume ntPro perti esA"(ByVa l hWn d AsLong, _ ByV al hP rinte r AsLong, _ ByV al pD evice NameAs St ring, _ ByV al pD evMod eOutp ut As Any, _ ByV al pD evMod eInpu t AsAny,_ ByVa l fMo de As Long) AsLong'--------------------------------------------------------------------------------' 程序: S etPri ntSty le'描述: 控制打印机设置打印机进纸类型,以及打印方向' 参数: o rient ation Const s (Pa geDir ectio n) 打印方向,1=纵向打印,2=横向打印' I nt_Pa perSi ze (I ntege r = 9) 默认打印A4,A3=8,A5=11,B4=12,B5=13'--------------------------------------------------------------------------------P ublic Func tionSetPr intSt yle(O rient ation Const s AsPageD irect ion,_O ption al By Val I nt_Pa perSi ze As Inte ger = 9) A s Boo lean Di m Pri nterH andleAs Lo ng DimPrint erNam e As S tringD im pdAs PR INTER_DEFA ULTS Di m MyD evMod e As D EVMOD EDim R esultAs Lo ng DimNeede d As L ong Dim pFul lDevM ode As LongD im pi2_buf fer()As Lo ngPrint erNam e = P rinte r.Dev iceNa me If P rinte rName = "" Then Exi t Fun ctionE nd If pd.pDat aType = vb NullS tringp d.pDe vMode = 0&pd.De sired Acces s = P RINTE R_ALL_ACCE SS Res ult = Open Print er(Pr inter Name, Prin terHa ndle, pd) IfResul t = 0 Then Exit Func tion Res ult = GetP rinte r(Pri nterH andle, 2,ByVal 0&,0, Ne eded) Re Dim p i2_bu ffer((Need ed \4)) Res ult = GetP rinte r(Pri nterH andle, 2,pi2_b uffer(0),Neede d, Ne eded)If Re sult= 0 T hen E xit F uncti onpFull DevMo de =pi2_b uffer(7) Ca ll Co pyMem ory(M yDevM ode,ByVal pFul lDevM ode,Len(M yDevM ode)) My DevMo de.dm FormN ame = orie ntati onCon sts MyD evMod e.dmO rient ation = or ienta tionC onstsM yDevM ode.d mFiel ds =DM_OR IENTA TION My DevMo de.dm Field s = M yDevM ode.d mFiel ds or DM_P APERS IZE MyD evMod e.dmP aperS ize = Int_Paper Size Cal l Cop yMemo ry(By Val p FullD evMod e, My DevMo de, L en(My DevMo de))R esult = Do cumen tProp ertie s(0&, _ Pr inter Handl e, Pr inter Name, _ By Val p FullD evMod e, _ByVal pFul lDevM ode,_ DM_IN_BU FFERor DM_OUT_BUFFE R) Res ult = SetP rinte r(Pri nterH andle, 2,pi2_b uffer(0),0&) Call Clos ePrin ter(P rinte rHand le) Era se pi2_buf fer Set Print Style = Tr ueEn d Fun ction我已经说过多遍关于这个问题了如果想自定义纸张的话就用这个。
VB打印技巧

ResetPrinterOrientation Me'设为默认值Printer.Orientation=VbPRORPortrait'纵向打印Printer.Orientation=VbPRORLandscape'横向打印Printer.PaperSize=vbPRPSA4'定义纸张大小为A4设置打印页边距'你可以使用打印机的Scale属性来设置打印页边距。
下面的代码设置左边距为1/2英寸。
右边距为3/4英寸。
乘以1440是将英尺转换成twips。
Printer.ScaleLeft=-0.75*1440Printer.ScaleTop=-0.5*1440Printer.CurrentX=0Printer.CurrentY=0打印多页Rich Text打印对象在处理RichTextBox时由于忽视了Rich Text代码将不会工作得很好。
为了打印RichTextBox,要使用SelPrint命令,但是SelPrint不是非常得友好,它按照自己的方式打印然后产生退纸动作。
为了打印多页Rich Text,要找到每一页的开始和结束点,然后依此设置SelStart和SelLength,最后使用SelPrint打印出每一页。
以下是工作的每一个步骤:1、使用SaveFile命令保存编辑版本的文件。
2、转换编辑版本为打印版本:遍历这个文档,修改SelIndent和SelRightIndent的数值,使之适合于打印机(注意:编辑时的缩进数值对于屏幕是合适的,但不适用于打印机)。
做些其他的修改,比如:添加页眉,消除行号。
3、使用SelPrint循环一次打印一个页面。
这里,计算行数是一个技巧,找到LFCRs 是容易的,但是,也必须要计算一下行缠绕,它也算在了行统计中,以及绝对不允许发生的页面溢出情况。
4、使用SelRTF=""删除打印版本。
5、使用LoadFile重新启动编辑版本。
vb6 设置打印机纸张类型,以及打印方向

dmICMIntent As Long ' // 仅供Win95
dmMediaType As Long ' // 仅供Win95
End Type
'打印机使用初始化结构体
dmDitherType As Long ' // 仅供Win95
dmReserved1 As Long ' // 仅供Win95
dmReserved2 As Long ' // 仅供Win95
vbPRPSFolio 14 对开本, 8 1/2 x 13 英寸
vbPRPSQuarto 15 四开本, 215 x 275 mm
vbPRPS1&H14 16 10 x 14 英寸
vbPRPS11x17 17 11 x 17 英寸
Private Const DM_MODIFY = 8
Private Const DM_IN_BUFFER = DM_MODIFY
Private Const DM_COPY = 2
Private Const DM_OUT_BUFFER = DM_COPY
Private Const DM_DUPLEX = &H1000&
vbPRPSNote 18 便条,8 1/2 x 11 英寸
vbPRPSEnv9 19 #9 信封, 3 7/8 x 8 7/8 英寸
vbPRPSEnv10 20 #10 信封, 4 1/8 x 9 1/2 英寸
vbPRPSEnv11 21 #11 信封, 4 1/2 x 10 3/8 英寸
VB打印和打印预览功能

打印和打印预览功能今天,我们将制作一个能实现打印和打印预览功能的应用程序。
程序运行结果如图所示。
运行结果技术要点●打印预览功能的实现●打印功能的实现实现过程■新建项目打开Visual ,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中选择“Windows应用程序”,在名称域中输入“PrintExample”,然后选择保存路径。
单击“确认”。
■添加控件和设置属性向当前窗体上添加三个Button控件,将他们的Text属性改为和界面一致。
■添加组件类和要打印的文件通过菜单“项目|添加组件”为当前项目添加一个组件类,并添加一个需要打印的文件。
■添加代码'组件类中的代码Imports SystemImports ponentModelImports System.Windows.FormsImports System.DrawingImports System.Drawing.PrintingImports System.IONamespace Microsoft.Samples.WinForms.VB.PrintingExample5Public Class TextFilePrintDocumentInherits PrintDocumentPrivate printFont As FontPrivate streamToPrint As StreamReaderPublic Sub New(streamToPrint As StreamReader)MyBase.NewMe.streamToPrint = streamToPrintEnd SubOverrides Protected Sub OnBeginPrint(ev As PrintEventArgs)MyBase.OnBeginPrint(ev)printFont = new Font("Arial", 10)End Sub'Override the OnPrintPage to provide the printing logic for the documentOverrides Protected Sub OnPrintPage(ev As PrintPageEventArgs)MyBase.OnPrintPage(ev)Dim lpp As Single = 0Dim yPos As Single = 0Dim count As Integer = 0Dim leftMargin As Single = ev.MarginBounds.LeftDim topMargin As Single = ev.MarginBounds.TopDim line as String'Work out the number of lines per page'Use the MarginBounds on the event to do thislpp = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)'Check count first so that we don't read line that we won't printline=streamToPrint.ReadLine()While ((count < lpp) And Not(line Is Nothing))yPos = topMargin + (count * printFont.GetHeight(ev.Graphics))ev.Graphics.DrawString (line, printFont, Brushes.Black, leftMargin,yPos, new StringFormat())count = count + 1if (count < lpp) thenline=streamToPrint.ReadLine()end ifEnd WhileIf (line <> Nothing) Thenev.HasMorePages = TrueElseev.HasMorePages = FalseEnd IfEnd SubEnd ClassEnd Namespace'主窗体中的代码Imports SystemImports ponentModelImports System.Windows.FormsImports System.DrawingImports System.Drawing.PrintingImports System.IONamespace Microsoft.Samples.WinForms.VB.PrintingExample5Public Class PrintFormInherits System.Windows.Forms.FormPrivate storedPageSettings As PageSettingsPublic Sub New ()MyBase.NewPrintForm = MeInitializeComponent()AddHandler printButton.Click, AddressOf printButton_ClickAddHandler pageSetupButton.Click, AddressOf pageSetupButton_ClickAddHandler printPreviewButton.Click, AddressOfprintPreviewButton_ClickEnd Sub'页面设置Private Sub pageSetupButton_Click(sender As object, e As System.EventArgs)Dim psDlg As New PageSetupDialogIf (storedPageSettings Is Nothing) ThenstoredPageSettings = new PageSettings()End IfpsDlg.PageSettings = storedPageSettingspsDlg.ShowDialogCatch ex As ExceptionMessageBox.Show("An error occurred - " + ex.Message) End TryEnd Sub'开始打印Private Sub printButton_Click(sender As object, e As System.EventArgs) TryDim streamToPrint As StreamReader = new StreamReader("PrintMe.Txt")Try'使用缺省打印机Dim pd As TextFilePrintDocument = newTextFilePrintDocument(streamToPrint)If Not (storedPageSettings Is Nothing) Thenpd.DefaultPageSettings = storedPageSettingsEnd IfDim dlg As New PrintDialog()dlg.Document = pdDim result As DialogResult = dlg.ShowDialog()If (result = System.Windows.Forms.DialogResult.OK) Thenpd.Print()End IfFinallystreamToPrint.Close()End TryCatch ex As ExceptionMessageBox.Show("An error occurred printing the file - " +ex.Message)End TryEnd Sub'打印预览Private Sub printPreviewButton_Click(sender As object, e AsSystem.EventArgs)TryDim streamToPrint As StreamReader = new StreamReader("PrintMe.Txt")TryDim pd As TextFilePrintDocument = newTextFilePrintDocument(streamToPrint)If Not (storedPageSettings Is Nothing) Thenpd.DefaultPageSettings = storedPageSettingsEnd IfDim dlg As New PrintPreviewDialog()dlg.Document = pddlg.ShowDialog()FinallystreamToPrint.Close()End TryCatch ex As ExceptionMessageBox.Show("An error occurred - " + ex.Message) End TryPublic Overloads Overrides Sub Dispose()MyBase.Dispose()components.Dispose()End Sub<STAThread()> Shared Sub Main()System.Windows.Forms.Application.Run(New PrintForm())End SubEnd ClassEnd Namespace■运行程序单击菜单“调试|启动”或单击图标运行程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)假设你的COMMONDIALOG控件叫CMDiag用如下代码可以使你选择的打印机成为默认打印机"Printer"On Error Resume NextCMDiag.PrinterDefault = TrueCMDiag.CancelError = TrueCMDiag.ShowPrinterIf Err.Number <> 0 Then Exit Sub(2)VB 里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))Set Printer = Printers(0) ' 将预设打印机设定成第一种打印机Set Printer = Printers(1) ' 将预设打印机设定成第二种打印机但实际上以上叙述有时候不会成功(原因不详),为了能够成功地改变预设打印机,以下是呼叫Windows API 的方法:( 此一解决方案适用於Windows 95,98)1. API 的宣告:Const HWND_BROADCAST = &HFFFF&Const WM_WININICHANGE = &H1APrivate Declare Function GetProfileString Lib "kernel32" Alias _ "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As _ String, ByVal lpDefault As String, ByVal lpReturnedString As String, _ByVal nSize As Long) As LongPrivate Declare Function WriteProfileString Lib "kernel32" Alias _ "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName _As String, ByVal lpszString As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _lParam As Any) As Long2. 程式范例:PrinterName = "您想设定的打印机名称"Dim S As String, length As Long, hKey As LongS = String(80, Chr(0))length = GetProfileString("devices", PrinterName, "", S, Len(S))S = Left(S, length)Call WriteProfileString("windows", "device", PrinterName & "," & S)Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, &H7FFF&, ByVal "wind ows")至於改变NT 预设打印机的方法,则是改变登录资料库(Registry)打印机的设定,在登录资料库中纪录预设打印机的Value 是:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows subkey 的Device value (3)VB中获取指定打印机的各种纸张类型及大小放入一个MSFlexGrid,名称为fgd1,列数为4'Option ExplicitPrivate Const DC_MAXEXTENT = 5Private Const DC_MINEXTENT = 4Private Const DC_PAPERNAMES = 16Private Const DC_PAPERS = 2Private Const DC_PAPERSIZE = 3Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabi litiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Lon g, lpOutput As Any, lpDevMode As Any) As LongPrivate Type POINTSx As Longy As LongEnd TypePrivate Sub Form_Load()Dim i As LongWith fgd1.Clear.FormatString = "^纸张编号|^纸张名称|^纸张长度|^纸张宽度"For i = 0 To .Cols - 1.ColWidth(i) = 1700Next i.AllowUserResizing = flexResizeColumns.Left = 0.Width = Me.ScaleWidthEnd WithGetPaperInfoEnd SubPrivate Sub GetPaperInfo()Dim i As Long, ret As LongDim Length As Integer, Width As IntegerDim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS'支持最大打印纸:ret = DeviceCapabilities(打印机名称, "LPT1", DC_MAXEXTENT, ByVal 0&, ByVal 0&) Length = ret \ 65536Width = ret - Length * 65536'lblMaxLength.Caption = Length'lblMaxWidth.Caption = Width'支持最小打印纸:ret = DeviceCapabilities(打印机名称, "LPT1", DC_MINEXTENT, ByVal 0&, ByVal 0&) Length = ret \ 65536Width = ret - Length * 65536'支持纸张种类数ret = DeviceCapabilities(打印机名称, "LPT1", DC_PAPERS, ByVal 0&, ByVal 0&)'纸张编号ReDim PaperNo(1 To ret) As IntegerCall DeviceCapabilities(打印机名称, "LPT1", DC_PAPERS, PaperNo(1), ByVal 0&)'纸张名称Dim arrPageName() As ByteDim allNames As StringDim lStart As Long, lEnd As LongReDim PaperName(1 To ret) As StringReDim arrPageName(1 To ret * 64) As ByteCall DeviceCapabilities(打印机名称, "LPT1", DC_PAPERNAMES, arrPageName(1), ByVal 0&)allNames = StrConv(arrPageName, vbUnicode)'loop through the string and search for the names of the papersi = 1DolEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)If (lEnd > 0) And (lEnd - lStart - 1 > 0) ThenPaperName(i) = Mid$(allNames, lStart + 1, lEnd - lStart - 1)i = i + 1End IflStart = lEndLoop Until lEnd = 0'纸张尺寸ReDim PaperSize(1 To ret) As POINTSCall DeviceCapabilities(bo1.Text, "LPT1", DC_PAPERSIZE, PaperSize(1), ByVal 0&)'显示在表格中For i = 1 To retfgd1.AddItem PaperNo(i) & vbTab & PaperName(i) & vbTab & PaperSize(i).y & vbTab & PaperSize(i).xNext i'移除第一个空行fgd1.Row = 1fgd1.RemoveItem 1End SubPrivate Sub Form_Resize()With fgd1.Left = 0.Width = Me.ScaleWidth.Height = Me.ScaleHeight.Top = 0End WithEnd Sub(5)编写VB打印控制程序的几点心得摘要本文在总结作者实际开发经验的基础上,详细介绍了VB实现高分辨率打印方法的几点心得。
阐述了参数化绘图程序缩短打印程序开发时间的方法以及打印机缩放属性与窗体属性匹配使用的技巧,并总结了解决坐标定位、图形与其实际打印位置出现误差等问题的经验。
关键词PrintForm 高分辨率打印参数化绘图缩放属性Some Experiences on VB Print ControlBai Yang, Wang PengComputer Science DepartmentUniversity of Information and EngineeringZhengzhou, ChinaAbstract:On the basis of our working experiences, we have given a detail description about VB print method of high resolution. We focus on how toshorten developing period with parameterized plot program, the match between the zoom attribute and the attribute of display window etc., which based on print program of Printer Object. In addition to this, we have introduced some experiences on dealing with position error that caused by the mismatch between font and graph on screen and that on printer.Keywords:PrintForm, High Resolution Print, parameterized plot ,zoom attribute1.简介Visual Basic(VB)给用户提供了可视化编程环境,因其简单易学、功能强大而得到了广泛的应用。