VB中打印机选择Word格式文档下载.docx
- 文档编号:19121785
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:18
- 大小:25.53KB
VB中打印机选择Word格式文档下载.docx
《VB中打印机选择Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VB中打印机选择Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
程式典范:
PrinterName="
您想设定的打印机名称"
DimSAsString,lengthAsLong,hKeyAsLong
S
=
String(80,
Chr(0))
length
=GetPro("
devices"
PrinterName,"
S,
Len(S))
Left(S,
length)
Call
WritePro("
windows"
device"
PrinterName
&
"
S)
..
CallSendMessage(HWND_BROADCAST,WM_WININICHANGE,&
H7FFF&
ByVal"
)
至於改变NT预设打印机的方法,则是改变登录资料库(Registry)打印机的设定,
在登录资料库中纪录
预设打印机的Value是:
HKEY_CURRENT_USER
\Software\Microsoft\WindowsNT\CurrentVersion\Windowssubkey的Devicevalue
3)VB中获取指定打印机的各样纸张种类及大小
放入一个MSFlexGrid,名称为fgd1,列数为4
'
Option
Explicit
Private
Const
DC_MAXEXTENT=
5
DC_MINEXTENT=4
DC_PAPERNAMES=
16
ConstDC_PAPERS=2
DC_PAPERSIZE=
3
Declare
Function
DeviceCapabilities
Lib
winspool.drv"
Alias
De
viceCapabilitiesA"
(ByVal
lpDeviceName
As
String,
ByVal
lpPort
Strin
g,ByVal
iIndex
AsLong,
lpOutput
Any,lpDevMode
AsAny)
Long
TypePOINTS
AsLong
End
Type
Sub
Form_Load()
Dim
i
With
fgd1
.Clear
.FormatString
^纸张编号|^纸张名称|^纸张长度|^纸张宽度"
For
To
.Cols
-1
.ColWidth(i)
1700
Next
.AllowUserResizing
=flexResizeColumns
.Left
.Width
GetPaperInfo
GetPaperInfo()
Long,
ret
Length
Integer,
Width
AsInteger
PaperNo()
PaperName()AsString,
PaperSize()
AsPOINTS
支持最大打印纸:
ret=DeviceCapabilities(打印机名
称,"
LPT1"
DC_MAXEXTENT,ByVal0&
ByVal0&
)Length=ret\65536
Width=ret-Length*65536
=Length
=Width
支持最小打印纸:
DC_MINEXTENT,ByVal0&
支持纸张种类数
DeviceCapabilities(
打
印
机
名
称,
DC_PAPERS,ByVal
0&
纸张编号
ReDim
PaperNo(1Toret)As
Integer
DC_PAPERS,PaperNo
(1),
纸张名称
arrPageName()
Byte
allNames
AsString
lStart
lEnd
PaperName(1
ret)
String
arrPageName(1
Toret
*
64)As
DC_PAPERNAMES,arrPageName
(1),
allNames=
StrConv(arrPageName,
vbUnicode)
loop
through
the
string
and
search
for
namesofthe
papers
=1
Do
=InStr(lStart
+
1,
allNames,
Chr$(0),
vbBinaryCompare)
If(lEnd
0)
And
(lEnd
-lStart
-1>
Then
PaperName(i)
Mid$(allNames,
+1,
lEnd-lStart
-
+1
If
Loop
Until
纸张尺寸
ReDimPaperSize(1
POINTS
CallDeviceCapabilities(Form2.Combo1.Text,"
DC_PAPERSIZE,PaperSize(
1),ByVal0&
显示在表格中
Fori=1Toret
PaperNo(i)&
vbTab&
PaperName(i)&
Paper
Size(i).y&
PaperSize(i).x
Nexti
移除第一个空行
fgd1.Row=1
1
EndSub
PrivateSubForm_Resize()
Withfgd1
.Left=0
.Width
.Height
.Top=0
EndWith
(5)编写VB打印控制程序的几点心得
摘要本文在总结作者实质开发经验的基础上,详尽介绍了VB实现高分辨率打印方法
的几点心得。
论述了参数化画图程序缩短打印程序开发时间的方法以及打印机缩放属性与窗体属性般配使用的技巧,并总结认识决坐标定位、图形与其实质打印地点出现偏差等问题的经验。
重点词PrintForm高分辨率打印参数化画图缩放属性
SomeExperiencesonVBPrintControl
BaiYang,WangPeng
ComputerScienceDepartment
UniversityofInformationandEngineering
Zhengzhou,China
Abstract:
Onthebasisofourworkingexperiences,wehavegivenadetail
descriptionaboutVBprintmethodofhighresolution.Wefocusonhowtoshorten
developingperiodwithparameterizedplotprogram,thematchbetweenthezoom
attributeandtheattributeofdisplaywindowetc.,whichbasedonprintprogram
ofPrinterObject.Inadditiontothis,wehaveintroducedsomeexperiencesondealingwithpositionerrorthatcausedbythemismatchbetweenfontandgraphonscreenandthatonprinter.
Keywords:
PrintForm,HighResolutionPrint,parameterizedplot
,zoom
attribute
1.简介
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公用标准对话框CommonDialog控件【打印】
VB为用户供给了
Windows公用标准对话框CommonDialog控件:
【翻开】、【文件另存
为】、【颜色】、【字体】、【打印】。
CommonDialog控件在Visual
Basic
和Microsoft
Windows动向连结库
例程之间供给了接口。
利用公用标准对话框【打印】开发
VB的打印程序,将大大缩短程序的开发周期。
应用程序中要使用公用对话框,一定第一在
工具箱中增添公用对话框控件。
该动作经过激活【零件】对话框,选中
MicrosoftCommon
DialogControl6.0,
单击【确立】即可。
而后再将公用控件增添到窗体上并设置相应属性,
该控件拥有的属性有
Color、Font、Print、Help等。
VB供给mnu()过程供用户增添开发的打印程序代码。
⑶Printer对象控制打印的基本过程
利用Printer对象开发的打印程序主要靠其供给的——NewPage(打印新的一页,CurrentX、CurrentY置为新页的左上角,可达成多页功能。
)、EndDoc(将打印任务加入打印机行列)、KillDoc(撤消打印任务)控制打印过程的。
一般状况下,打印程序达成多页打印时会多次履行NewPage,结束时履行一次EndDoc将打印任务加入打印机行列。
假如你在NewPage后,立刻使用EndDoc,VB则不会打印额外的空白页。
假如希望显示空白页,则可在新的一页上只使用“打“印空字符即可。
为了经过Printer对象实现文本和图形的打印,获取最好的打印质量,还需要
对VB控制打印机的多种属性有更深入的理解,比如打印机的坐标系统向屏幕坐标系统的变换、打印机字体尺寸确实定等。
下边给出了打印程序的主框架:
PrivateSubmnuClick()
IfActiveFormIsNothingThenExitSub
WithdlgCommonDialog‘打印机公用对话框
.DialogTitle="
打印"
.CancelError=True
.Flags=1
‘将打印机公用对话框设置的字体大小传达
给打印机
.ShowPrinter‘在屏幕上显示【打印】公用对话框
IfErr<
=False‘初始化打印的字体为
不透明
SetPrinterScaleMyform‘般配打印机的缩放属性与窗体
的属性
PrintAnywherePrinter‘可搁置用户编写的打印对象
参数化例程
‘实现字符和图形的显示
‘打印机坐标初始化
PrintAnywherePrinter‘打印另一页的内容
‘将该任务加入打印机任务队
列
‘不打印空白页
‘撤消目前的打印任务
EndIf
EndWith
EndSub
⑷参数化画图程序
用VB开发应用程序时,假如使用参数化画图例程进行屏幕显示程序的开发,则在开发打印程序时,就不需再另行开发代码,进而防止了大批的重复劳动,有效地缩短了程序的开发周期。
参数化画图例程就是:
在开发例程时,为每一个例行程序供给一个OBJECT种类的参数,调用程序经过向例程的OBJECT种类参数分
别传达窗体、Printer对象,便可分别达成屏幕显示与打印机输出。
见以下示
例:
SubPrintAnywhere(DestAsObject)
Dest.Print“HELLO!
”
DestIsPrinterThen
EndIf
要达成屏幕上的输出,调用PrintAnywhereMyform即可,而调用PrintAnywherePrinter则达成在打印机上输出。
⑸属性般配与窗体缩放
因为控制打印机实质画图地区大小的属性Height和Width,由目前正在使用的纸张决定,并且可打印的地区与纸张边沿有必定距离。
因此为了获取正确的打印输出结果,不可以简单地将Printer对象直接传达给画图例行程序,还一定要解决打印机的缩放属性与显示窗体属性相般配的问题。
即:
保证使窗体中的打印内容以正确的大小显示,并居于可打印地区的中间。
实质上实现的是打印机的坐标系统向屏幕坐标系统的变换。
详细过程是:
使用打印机的ScaleX和ScaleY方法,获取以twip为单位的打印机尺寸,再利用窗体的ScaleX和ScaleY方法将这些尺寸变换为窗体中的坐标系统,进而实现以窗体的坐标系统供给打印机可打印区
域大小的目的。
而后,用这些尺寸作为打印机中新的ScaleWidth和ScaleHeight,即可实现属性般配。
可是,我们在打印时,常常会碰到这样的场合——在不改变窗体形状的状况下,需要扩大或减小窗体的大小。
要达成这样的工作,不单需要达成属性般配,还要确立对象被缩放的系数。
程序以下:
PrivateSubSetPrinterScale(objAsObject)
DimpwidAsSingle,phgtAsSingle,xmidAsSingle,ymidAsSingleDimowidAsSingle,ohgtAsSingle
owid=obj.ScaleX(obj.ScaleWidth,obj.ScaleMode,vbTwips)
ohgt=obj.ScaleY(obj.ScaleHeight,obj.ScaleMode,vbTwips)
‘获取窗体以Twips表示的尺寸
pwid=Printer.ScaleX(Printer.ScaleWidth,Printer.ScaleMode,vbTwips)
phgt=Printer.ScaleY(Printer.ScaleHeight,Printer.ScaleMode,vbTwips)
‘获取打印机以Twips表示的尺寸
If(ohgt/owid>
phgt/pwid)Then
s=phgt/ohgt
Else
s=pwid/owid
EndIf‘计算缩放因子
pwid=obj.ScaleX(pwid,vbTwips,obj.ScaleMode)/s
phgt=obj.ScaleY(phgt,vbTwips,obj.ScaleMode)/s
‘将打印机的尺寸变换成obj的坐标系统/缩放因子
x_mid=+/2
y_mid=+/2‘设置打印地区的中心点坐
标
(x_mid-pwid/2,y_mid-phgt/2)-(x_mid+pwid/2,y_mid+phgt/2)
‘设置打印机中新的ScaleWidth和ScaleHeight
⑹坐标定位
窗体、图片框控件以及Printer对象供给的TextWidth和TextHeight方法在
文本定位的应用方面很实用。
TextWidth、TextHeight分别以对象目前的刻度单位返回字符串的宽度和高度。
可是一定注意好多字体中其字符宽度其实不所有同样,因此不可以简单地将单个字符的宽度乘以字符数来获取字符串的宽度。
对那些没有TextWidth和TextHeight的控件可经过设置父窗体的Font属性,使其与该控件的属性相般配,再利用父窗体的TextWidth和TextHeight获取它的字符串的宽度和高度。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 打印机 选择