0ThenExitSub(2)VB里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))SetPrinter=Printers(0)'将预设打印机设定成第一种打印机SetPrinter=Printers(1)'将预设打印机设定成第二种打印机但实际"/> 0ThenExitSub(2)VB里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))SetPrinter=Printers(0)'将预设打印机设定成第一种打印机SetPrinter=Printers(1)'将预设打印机设定成第二种打印机但实际"/>
首页 VB中打印机选择

VB中打印机选择

举报
开通vip

VB中打印机选择ItwaslastrevisedonJanuary2,2021VB中打印机选择(1)假设你的COMMONDIALOG控件叫CMDiag用如下代码可以使你选择的打印机成为默认打印机"Printer"OnErrorResumeNext=True=TrueIf<>0ThenExitSub(2)VB里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))SetPrinter=Printers(0)'将预设打印机设定成第一种打印机SetPrinter=Printers(1)'将预设打印机设定成第二种打印机但实际...

VB中打印机选择
ItwaslastrevisedonJanuary2,2021VB中打印机选择(1)假设你的COMMONDIALOG控件叫CMDiag用如下代码可以使你选择的打印机成为默认打印机"Printer"OnErrorResumeNext=True=TrueIf<>0ThenExitSub(2)VB里面,原本改变预设打印机的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 是:(假设安装有两种打印机(驱动程式))SetPrinter=Printers(0)'将预设打印机设定成第一种打印机SetPrinter=Printers(1)'将预设打印机设定成第二种打印机但实际上以上叙述有时候不会成功(原因不详),为了能够成功地改变预设打印机,以下是呼叫WindowsAPI的方法:(此一解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 适用於Windows95,98)1.API的宣告:ConstHWND_BROADCAST=&HFFFF&ConstWM_WININICHANGE=&H1APrivateDeclareFunctionGetProfileStringLib"kernel32"Alias_"GetProfileStringA"(ByVallpAppNameAsString,ByVallpKeyNameAs_String,ByVallpDefaultAsString,ByVallpReturnedStringAsString,_ByValnSizeAsLong)AsLongPrivateDeclareFunctionWriteProfileStringLib"kernel32"Alias_"WriteProfileStringA"(ByVallpszSectionAsString,ByVallpszKeyName_AsString,ByVallpszStringAsString)AsLongPrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong2.程式范例:PrinterName="您想设定的打印机名称"DimSAsString,lengthAsLong,hKeyAsLongS=String(80,Chr(0))length=GetProfileString("devices",PrinterName,"",S,Len(S))S=Left(S,length)CallWriteProfileString("windows","device",PrinterName&","&S)CallSendMessage(HWND_BROADCAST,WM_WININICHANGE,&H7FFF&,ByVal"windows")至於改变NT预设打印机的方法,则是改变登录资料库(Registry)打印机的设定,在登录资料库中纪录预设打印机的Value是:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windowssubkey的Devicevalue(3)VB中获取指定打印机的各种纸张类型及大小放入一个MSFlexGrid,名称为fgd1,列数为4'OptionExplicitPrivateConstDC_MAXEXTENT=5PrivateConstDC_MINEXTENT=4PrivateConstDC_PAPERNAMES=16PrivateConstDC_PAPERS=2PrivateConstDC_PAPERSIZE=3PrivateDeclareFunctionDeviceCapabilitiesLib""Alias"DeviceCapabilitiesA"(ByVallpDeviceNameAsString,ByVallpPortAsString,ByValiIndexAsLong,lpOutputAsAny,lpDevModeAsAny)AsLongPrivateTypePOINTSxAsLongyAsLongEndTypePrivateSubForm_Load()DimiAsLongWithfgd1.Clear.FormatString="^纸张编号|^纸张名称|^纸张长度|^纸张宽度"Fori=0To.Cols-1.ColWidth(i)=1700Nexti.AllowUserResizing=flexResizeColumns.Left=0.Width=EndWithGetPaperInfoEndSubPrivateSubGetPaperInfo()DimiAsLong,retAsLongDimLengthAsInteger,WidthAsIntegerDimPaperNo()AsInteger,PaperName()AsString,PaperSize()AsPOINTS'支持最大打印纸:ret=DeviceCapabilities(打印机名称,"LPT1",DC_MAXEXTENT,ByVal0&,ByVal0&)Length=ret\65536Width=ret-Length*65536'=Length'=Width'支持最小打印纸:ret=DeviceCapabilities(打印机名称,"LPT1",DC_MINEXTENT,ByVal0&,ByVal0&)Length=ret\65536Width=ret-Length*65536'支持纸张种类数ret=DeviceCapabilities(打印机名称,"LPT1",DC_PAPERS,ByVal0&,ByVal0&)'纸张编号ReDimPaperNo(1Toret)AsIntegerCallDeviceCapabilities(打印机名称,"LPT1",DC_PAPERS,PaperNo(1),ByVal0&)'纸张名称DimarrPageName()AsByteDimallNamesAsStringDimlStartAsLong,lEndAsLongReDimPaperName(1Toret)AsStringReDimarrPageName(1Toret*64)AsByteCallDeviceCapabilities(打印机名称,"LPT1",DC_PAPERNAMES,arrPageName(1),ByVal0&)allNames=StrConv(arrPageName,vbUnicode)'loopthroughthestringandsearchforthenamesofthepapersi=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+1EndIflStart=lEndLoopUntillEnd=0'纸张尺寸ReDimPaperSize(1Toret)AsPOINTSCall"LPT1",DC_PAPERSIZE,PaperSize(1),ByVal0&)'显示在表格中Fori=1ToretPaperNo(i)&vbTab&PaperName(i)&vbTab&PaperSize(i).y&vbTab&PaperSize(i).xNexti'移除第一个空行=11EndSubPrivateSubForm_Resize()Withfgd1.Left=0.Width=.Height=.Top=0EndWithEndSub(5)编写VB打印控制程序的几点 心得 信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会 摘 要 本文在作者实际开发经验的基础上,详细介绍了VB实现高分辨率打印的几点心得。阐述了参数化绘图程序缩短打印程序开发时间的方法以及打印机缩放属性与窗体属性匹配使用的技巧,并总结了解决坐标定位、图形与其实际打印位置出现误差等的经验。关键词 PrintForm高分辨率打印参数化绘图缩放属性SomeExperiencesonVBPrintControlBaiYang,WangPengComputerScienceDepartmentUniversityofInformationandEngineeringZhengzhou,ChinaAbstract:Onthebasisofourworkingexperiences,we havegivenadetaildescriptionaboutVBprintmethodofhighresolution.Wefocusonhowtoshortendevelopingperiodwithparameterizedplotprogram,thematchbetweenthezoomattributeandtheattributeofdisplaywindowetc.,basedonprintprogramofPrinterObject.Inadditiontothis,wehaveintroducedsomeexperiencesondealingwithpositionerrorthatcausedbythemismatchbetweenfontandgraphonscreenandthatonprinter.Keywords:PrintForm,HighResolutionPrint,parameterizedplot,zoomattribute1.简介VisualBasic(VB)给用户提供了可视化编程环境,因其简单易学、功能强大而得到了广泛的。VB提供了两种实现打印的方法。一般在对打印质量要求不高的场合,或者是编程项目的早期开发过程中,可以直接使用VB窗体的Printform方法实现打印。用这种方法实现打印具有编程简单、易用并且功能强大的优点,它只需要通过一行代码,几乎能打印所有。实现的方法就是:首先将要打印的内容在屏幕上显示出来,然后开发人员只要为窗体对象激活PrintForm,窗体则自动将要打印的内容发送到Printer对象上,其语法格式如下:[窗体.]PrintForm。如果窗体中包括图形,那么打印前应先置窗体的AutoRedraw属性为真。这种方法虽然简单,但是它却存在着内存消耗大、打印粗糙、速度慢等缺陷,尤其对于带有滚动条的图像,这种方法只能打印当前可视的区域。在实际应用中经常会遇到对打印质量要求很高的场合,例如打印五线谱,对打印的美观、清晰度以及音符符头的位置都有很严格的要求,这种应用场合若采用VB提供的另一种基于Printer对象的打印方法则可以获得高分辨率的打印,得到很高的打印质量。在实际应用中,也可以根据实际应用情况将上述两种方法结合起来使用,即:前期工作使用PrintForm简单的打印方法将窗体的布局定下来,后期再使用基于Printer对象的打印方法实现最终的打印工作。2.高分辨率打印程序开发心得⑴Printer对象VB的打印可以使用Printer对象。Printer对象是一个独立于打印机设备的封装,它可以代表不同的打印机,初始时,Printer对象为系统缺省的打印机,也可以使用下列语句:SetPrinter=Printers(2)(其中2代表Printers集中的第二个打印机)对打印机进行指定。Printer对象具备例如:ColorMode、Copies、Duplex、Printquality等控制打印机特征的属性,提供了Newpage、EndDoc、KillDoc等控制打印过程的方法,以及大多数由窗体和图片框控件提供的图形属性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它还拥有Font的所有属性。实现高分辨率的打印就是通过控制Printer对象的上述属性和方法完成的。⑵直接利用Windows公用 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 对话框CommonDialog控件【打印】VB为用户提供了Windows公用标准对话框CommonDialog控件:【打开】、【文件另存为】、【颜色】、【字体】、【打印】。CommonDialog控件在VisualBasic和MicrosoftWindows动态连接库例程之间提供了接口。利用公用标准对话框【打印】开发VB的打印程序,将大大缩短程序的开发周期。应用程序中要使用公用对话框,必须首先在工具箱中添加公用对话框控件。该动作通过激活【部件】对话框,选中MicrosoftCommonDialog,单击【确定】即可。然后再将公用控件添加到窗体上并设置相应属性,该控件具有的属性有Color、Font、Print、Help等。VB提供mnuFilePrint_Click()过程供用户添加开发的打印程序代码。⑶Printer对象控制打印的基本过程利用Printer对象开发的打印程序主要靠其提供的——NewPage(打印新的一页,CurrentX、CurrentY置为新页的左上角,可完成多页功能。)、EndDoc(将打印任务加入打印机队列)、KillDoc(取消打印任务)控制打印过程的。一般情况下,打印程序完成多页打印时会多次执行NewPage,结束时执行一次EndDoc将打印任务加入打印机队列。如果你在NewPage后,立即使用EndDoc,VB则不会打印额外的空白页。如果希望显示空白页,则可在新的一页上只使用““打印空字符即可。为了通过Printer对象实现文本和图形的打印,获得最好的打印质量,还需要对VB控制打印机的多种属性有更深入的理解,例如打印机的坐标体系向屏幕坐标体系的转换、打印机字体尺寸的确定等。下面给出了打印程序的主框架:PrivateSubmnuFilePrint_Click()OnErrorResumeNextIfActiveFormIsNothingnExitSubWithdlgCommonDialog‘打印机公用对话框.DialogTitle="打印".CancelError=True.Flags=1=‘将打印机公用对话框设置的字体大小传递给打印机.ShowPrinter‘在屏幕上显示【打印】公用对话框IfErr<>Then=False‘初始化打印的字体为不透明SetPrinterScaleMyform‘匹配打印机的缩放属性与窗体的属性PrintAnywherePrinter‘可放置用户编写的打印对象参数化例程‘实现字符和图形的显示‘打印机坐标初始化PrintAnywherePrinter‘打印另一页的内容‘打印机坐标初始化‘将该任务加入打印机任务队列‘不打印空白页‘取消当前的打印任务EndIfEndWithEndSub⑷参数化绘图程序用VB开发程序时,如果使用参数化绘图例程进行屏幕显示程序的开发,则在开发打印程序时,就不需再另行开发代码,从而避免了大量的重复劳动,有效地缩短了程序的开发周期。参数化绘图例程就是:在开发例程时,为每一个例行程序提供一个OBJECT类型的参数,调用程序通过向例程的OBJECT类型参数分别传递窗体、Printer对象,就可分别完成屏幕显示与打印机输出。见如下示例:SubPrintAnywhere(DestAsObject)“HELLO!”DestIsPrinternEnd IfEndSub要完成屏幕上的输出,调用PrintAnywhereMyform即可,而调用PrintAnywhere Printer则完成在打印机上输出。⑸属性匹配与窗体缩放因为控制打印机实际绘图区域大小的属性Height和Width,由正在使用的纸张决定,而且可打印的区域与纸张边缘有一定距离。因而为了获得正确的打印输出结果,不能简单地将Printer对象直接传递给绘图例行程序,还必须要解决打印机的缩放属性与显示窗体属性相匹配的。即:保证使窗体中的打印以正确的大小显示,并居于可打印区域的中间。实际上实现的是打印机的坐标体系向屏幕坐标体系的转换。具体过程是:使用打印机的ScaleX和ScaleY,获取以twip为单位的打印机尺寸,再利用窗体的ScaleX和ScaleY方法将这些尺寸转换为窗体中的坐标系统,从而实现以窗体的坐标系统提供打印机可打印区域大小的目的。然后,用这些尺寸作为打印机中新的ScaleWidth和ScaleHeight,即可实现属性匹配。但是,我们在打印时,经常会遇到这样的场合——在不改变窗体形状的情况下,需要扩大或缩小窗体的大小。要完成这样的工作,不仅需要完成属性匹配,还要确定对象被缩放的系数。程序如下:PrivateSubSetPrinterScale(objAsObject)DimpwidAsSingle,phgtAsSingle,xmidAsSingle,ymidAsSingleDimowidAsSingle,ohgtAsSingleowid=,,vbTwips)ohgt=,,vbTwips)‘获取窗体以Twips表示的尺寸pwid=,,vbTwips)phgt=,,vbTwips)‘获取打印机以Twips表示的尺寸If(ohgt/owid>phgt/pwid)Thens=phgt/ohgtElses=pwid/owidEndIf‘缩放因子pwid=(pwid,vbTwips,/sphgt=(phgt,vbTwips,/s‘将打印机的尺寸转换成obj的坐标系统/缩放因子x_mid=+/2y_mid=+/2‘设置打印区域的中心点坐标(x_mid-pwid/2,y_mid-phgt/2)-(x_mid+pwid/2,y_mid+phgt/2)‘设置打印机中新的ScaleWidth和ScaleHeightEndSub⑹坐标定位窗体、图片框控件以及Printer对象提供的TextWidth和TextHeight方法在文本定位的应用方面很有用。TextWidth、TextHeight分别以对象当前的刻度单位返回字符串的宽度和高度。但是必须注意很多字体中其字符宽度并不全部相同,所以不能简单地将单个字符的宽度乘以字符数来获得字符串的宽度。对那些没有TextWidth和TextHeight的控件可通过设置父窗体的Font属性,使其与该控件的属性相匹配,再利用父窗体的TextWidth和TextHeight获得它的字符串的宽度和高度。但是,我们在完成屏幕显示程序调试后,在进行打印输出时却出现了屏幕显示与打印结果的不一致性的现象,表现在所打印的字体之间坐标关系与屏幕显示不一样,例如:屏幕显示上的两个字符不重叠,而打印出的字符却出现相互重叠的现象。经调试发现,问题出现在字体尺寸的确定上。程序中,屏幕上显示的字符坐标是通过对象的TextWidth和TextHeight方法计算得来的,它直接受到字体尺寸大小的。VB向用户提供的字体是在用户需要的打印机点的范围内,如果你需要的字体大小为73点,则打印出的实际字体大小为。然而窗体、图片框控件的Fontsize只能是整数,例如它不能将字体的大小定为,实际上这就造成了屏幕上显示字体与实际打印字体大小之间产生了误差。我们采用如下方法来解决该问题,就是在计算字体大小时,根据计算出来的字体尺寸,确定它存在的范围,然后再将它定位到VB提供的几种固定大小的字体上,而不是随意指定。当然,也可以有其它的解决办法。例如:字体大小选取偶数等。由于篇幅所限,这里不再作介绍。以上是笔者在实际应用工作中的一些心得与体会,希望本篇文章能对首次使用VB开发打印程序的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 人员有所帮助。(6)VB中不是有Printers集合吗写个ForEach循环就能枚举Printers集合中的所有打印机Printer对象和Printers集合使用Printer对象可以实现与系统打印机的通讯(最初是缺省系统打印机)。用Printers集合可获取有关系统上所有可用打印机的信息。语法PrinterPrinters(index)index所在处表示从0到之间的整数。说明用图形方法在Printer对象上绘制文本和图形。一旦Printer对象中含有将要打印的输出信息,可用EndDoc方法直接将输出信息送到应用程序的缺省打印机上。如果要打印这些信息,应该检查和可能还要修正窗体的布局。例如,如果用PrintForm方法打印窗体,则到页底图形图象可能被剪切,而文本则被移到下一页。Printers集合可用来查询可用的打印机,这样就可以为应用程序指定一台缺省打印机。例如也许要找出哪些可用打印机用了指定的打印驱动程序。下面的代码查找所有的可用打印机,定位在第一个将页码方向设置为纵向的打印机,然后将其设置为Portrait。DimXAsPrinterForEachXInPrintersIf=vbPRORPortraitThen'设定为系统缺省打印机。SetPrinter=X'终止查找打印机。ExitForEndIfNext用Set语句指定Printers集合中的某一打印机为缺省打印机。前面的示例指定由对象变量X标识的打印机为应用程序的缺省打印机。注意如果用Printers集合来确定某一特定打印机,如Printers(3),则只能访问只读属性。如果想访问个别打印机的可读写属性,那么首先要使那个打印机成为应用程序的缺省打印机。使用打印机集合打印机集合是一个包括操作系统中所有可用打印机的对象。打印机列表与打印安装对话框或Windows“控制面板”中的那些有效内容相同。打印机集合中的每台打印机有唯一索引定义。索引从0开始,每台打印机都可根据索引编号来引用。不论用何种打印方法,所有VisualBasic应用程序打印输出的内容,都直接指向Printer对象,它最初时代表Windows“控制面板”中指定的缺省打印机。不过,也可把Printers集合中的任意一台设置为缺省打印机。使用下列语法,可从打印机集合中选择打印机:SetPrinter=Printers(n)下列语句打印操作系统中所有打印机的设备名称到“立即”窗口中:PrivateSubCommand1_Click()DimxAsPrinterForEachxInPrintersNextEndSub注意不能在代码中创建新的Printer对象实例,也不能在Printers集合中直接添加或删除打印机。要在系统中添加或删除打印机,应使用Windows“控制面板”。(7)如何设置windows的默认打印机PublicFunctionResetDefaultPrinter(szBufAsString)AsBooleanDimxAsLongx=WriteProfileString("windows","device",szBuf)x=SendMessageByString(HWND_BROADCAST,WM_WININICHANGE,0&,"windows")EndFunction
本文档为【VB中打印机选择】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
热爱教育职业
格式:doc
大小:3MB
软件:Word
页数:0
分类:企业经营
上传时间:2021-09-18
浏览量:0