看到一个VB打印模块保存一下.docx
- 文档编号:25967653
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:17
- 大小:18.26KB
看到一个VB打印模块保存一下.docx
《看到一个VB打印模块保存一下.docx》由会员分享,可在线阅读,更多相关《看到一个VB打印模块保存一下.docx(17页珍藏版)》请在冰豆网上搜索。
看到一个VB打印模块保存一下
看到一个VB打印模块,保存一下
''''模块modPrint
OptionExplicit
PublicDeclareFunctionEnumFormsLib"winspool.drv"Alias"EnumFormsA"_
(ByValhPrinterAsLong,ByValLevelAsLong,ByRefpFormAsAny,_
ByValcbBufAsLong,ByRefpcbNeededAsLong,_
ByRefpcReturnedAsLong)AsLong
PublicDeclareFunctionAddFormLib"winspool.drv"Alias"AddFormA"_
(ByValhPrinterAsLong,ByValLevelAsLong,pFormAsByte)AsLong
PublicDeclareFunctionDeleteFormLib"winspool.drv"Alias"DeleteFormA"_
(ByValhPrinterAsLong,ByValpFormNameAsString)AsLong
PublicDeclareFunctionOpenPrinterLib"winspool.drv"_
Alias"OpenPrinterA"(ByValpPrinterNameAsString,_
phPrinterAsLong,ByValpDefaultAsLong)AsLong
PublicDeclareFunctionClosePrinterLib"winspool.drv"_
(ByValhPrinterAsLong)AsLong
PublicDeclareFunctionDocumentPropertiesLib"winspool.drv"_
Alias"DocumentPropertiesA"(ByValhwndAsLong,_
ByValhPrinterAsLong,ByValpDeviceNameAsString,_
pDevModeOutputAsAny,pDevModeInputAsAny,ByValfModeAsLong)_
AsLong
PublicDeclareFunctionResetDCLib"gdi32"Alias"ResetDCA"_
(ByValhdcAsLong,lpInitDataAsAny)AsLong
PublicDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"_
(hpvDestAsAny,hpvSourceAsAny,ByValcbCopyAsLong)
PublicDeclareFunctionlstrcpyLib"kernel32"Alias"lstrcpyA"_
(ByVallpString1AsString,ByReflpString2AsLong)AsLong
''''Optionalfunctionsnotusedinthissample,butmaybeuseful.
PublicDeclareFunctionGetFormLib"winspool.drv"Alias"GetFormA"_
(ByValhPrinterAsLong,ByValpFormNameAsString,_
ByValLevelAsLong,pFormAsByte,ByValcbBufAsLong,_
pcbNeededAsLong)AsLong
PublicDeclareFunctionSetFormLib"winspool.drv"Alias"SetFormA"_
(ByValhPrinterAsLong,ByValpFormNameAsString,_
ByValLevelAsLong,pFormAsByte)AsLong
''''ConstantsforDEVMODE
PublicConstCCHFORMNAME=32
PublicConstCCHDEVICENAME=32
PublicConstDM_FORMNAMEAsLong=&H10000
PublicConstDM_ORIENTATION=&H1&
''''ConstantsforPRINTER_DEFAULTS.DesiredAccess
PublicConstPRINTER_ACCESS_ADMINISTER=&H4
PublicConstPRINTER_ACCESS_USE=&H8
PublicConstSTANDARD_RIGHTS_REQUIRED=&HF0000
PublicConstPRINTER_ALL_ACCESS=(STANDARD_RIGHTS_REQUIREDOr_
PRINTER_ACCESS_ADMINISTEROrPRINTER_ACCESS_USE)
''''ConstantsforDocumentProperties()call
PublicConstDM_MODIFY=8
PublicConstDM_IN_BUFFER=DM_MODIFY
PublicConstDM_COPY=2
PublicConstDM_OUT_BUFFER=DM_COPY
''''Customconstantsforthissample''''sSelectFormfunction
PublicConstFORM_NOT_SELECTED=0
PublicConstFORM_SELECTED=1
PublicConstFORM_ADDED=2
PublicTypeRECTL
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType
PublicTypeSIZEL
cxAsLong
cyAsLong
EndType
PublicTypeSECURITY_DESCRIPTOR
RevisionAsByte
Sbz1AsByte
ControlAsLong
OwnerAsLong
GroupAsLong
SaclAsLong''''ACL
DaclAsLong''''ACL
EndType
''''ThetwodefinitionsforFORM_INFO_1makethecodingeasier.
PublicTypeFORM_INFO_1
FlagsAsLong
pNameAsLong''''String
SizeAsSIZEL
ImageableAreaAsRECTL
EndType
PublicTypesFORM_INFO_1
FlagsAsLong
pNameAsString
SizeAsSIZEL
ImageableAreaAsRECTL
EndType
PublicTypeDEVMODE
dmDeviceNameAsString*CCHDEVICENAME
dmSpecVersionAsInteger
dmDriverVersionAsInteger
dmSizeAsInteger
dmDriverExtraAsInteger
dmFieldsAsLong
dmOrientationAsInteger
dmPaperSizeAsInteger
dmPaperLengthAsInteger
dmPaperWidthAsInteger
dmScaleAsInteger
dmCopiesAsInteger
dmDefaultSourceAsInteger
dmPrintQualityAsInteger
dmColorAsInteger
dmDuplexAsInteger
dmYResolutionAsInteger
dmTTOptionAsInteger
dmCollateAsInteger
dmFormNameAsString*CCHFORMNAME
dmUnusedPaddingAsInteger
dmBitsPerPelAsLong
dmPelsWidthAsLong
dmPelsHeightAsLong
dmDisplayFlagsAsLong
dmDisplayFrequencyAsLong
EndType
PublicTypePRINTER_DEFAULTS
pDatatypeAsString
pDevModeAsLong''''DEVMODE
DesiredAccessAsLong
EndType
PublicTypePRINTER_INFO_2
pServerNameAsString
pPrinterNameAsString
pShareNameAsString
pPortNameAsString
pDriverNameAsString
pCommentAsString
pLocationAsString
pDevModeAsDEVMODE
pSepFileAsString
pPrintProcessorAsString
pDatatypeAsString
pParametersAsString
pSecurityDescriptorAsSECURITY_DESCRIPTOR
AttributesAsLong
PriorityAsLong
DefaultPriorityAsLong
StartTimeAsLong
UntilTimeAsLong
StatusAsLong
cJobsAsLong
AveragePPMAsLong
EndType
''''判断系统是否为NT系统
PublicDeclareFunctionGetVersionExLib"kernel32"Alias"GetVersionExA"_
(lpVersionInformationAsOSVERSIONINFO)AsLong
PublicTypeOSVERSIONINFO
dwOSVersionInfoSizeAsLong
dwMajorVersionAsLong
dwMinorVersionAsLong
dwBuildNumberAsLong
dwPlatformIdAsLong
szCSDVersionAsString*128''''MaintenancestringforPSSusage
EndType
PublicFunctionSelectForm(FormNameAsString,ByValMyhWndAsLong)_
AsInteger
DimnSizeAsLong''''SizeofDEVMODE
DimpDevModeAsDEVMODE
DimPrinterHandleAsLong''''Handletoprinter
DimhPrtDCAsLong''''HandletoPrinterDC
DimPrinterNameAsString
DimaDevMode()AsByte''''WorkingDEVMODE
DimFormSizeAsSIZEL
DimtmpFormNameAsString
DimisNTAsBoolean
DimPaperWidthAsLong,PaperHeightAsLong
''''在这里统一添加自定义纸张
SelectCaseFormName
Case"广东省发票"
WithFormSize''''Desiredpagesize
.cx=186000
.cy=102000
EndWith
PaperWidth=10544''''15.6cm
PaperHeight=5784''''10.2cm
Case"80列报表"
WithFormSize''''Desiredpagesize
.cx=210000
.cy=280000
EndWith
PaperWidth=11904''''21cm
PaperHeight=15872''''28cm
Case"40列报表"
WithFormSize''''Desiredpagesize
.cx=210000
.cy=140000
EndWith
PaperWidth=11904''''21cm
PaperHeight=7936''''14cm
Case"20列报表"
WithFormSize''''Desiredpagesize
.cx=210000
.cy=70000
EndWith
PaperWidth=11904''''21cm
PaperHeight=4008''''7cm
EndSelect
''''不是NT直接给Printer赋值得了
IfNotIsNtOsThen
Printer.Width=PaperWidth
Printer.Height=PaperHeight
SelectForm=FORM_SELECTED
ExitFunction
EndIf
PrinterName=Printer.DeviceName''''Currentprinter
hPrtDC=Printer.hdc''''hDCforcurrentPrinter
SelectForm=FORM_NOT_SELECTED''''Setforfailureunlessresetincode.
''''Getahandletotheprinter.
IfOpenPrinter(PrinterName,PrinterHandle,0&)Then
''''RetrievethesizeoftheDEVMODE.
nSize=DocumentProperties(MyhWnd,PrinterHandle,PrinterName,0&,_
0&,0&)
''''ReservememoryfortheactualsizeoftheDEVMODE.
ReDimaDevMode(1TonSize)
''''FilltheDEVMODEfromtheprinter.
nSize=DocumentProperties(MyhWnd,PrinterHandle,PrinterName,_
aDevMode
(1),0&,DM_OUT_BUFFER)
''''CopythePublic(predefined)portionoftheDEVMODE.
CallCopyMemory(pDevMode,aDevMode
(1),Len(pDevMode))
''''IfFormNameis"MyCustomForm",wemustmakesureitexists
''''beforeusingit.Otherwise,itcamefromourEnumFormslist,
''''andwedonotneedtocheckfirst.Notethatwecouldhave
''''passedinaFlaginsteadofcheckingforaliteralname.
tmpFormName=FormName
IfGetFormName(PrinterHandle,FormSize,tmpFormName)=0Then
''''Formnotfound-Eitherofthenext2lineswillwork.
''''FormName=AddNewForm(PrinterHandle,FormSize,"MyCustomForm")
AddNewFormPrinterHandle,FormSize,FormName
IfGetFormName(PrinterHandle,FormSize,FormName)=0Then
ClosePrinter(PrinterHandle)
SelectForm=FORM_NOT_SELECTED''''SelectionFailed!
ExitFunction
Else
SelectForm=FORM_ADDED''''FormAdded,Selectionsucceeded!
EndIf
EndIf
''''ChangetheappropriatememberintheDevMode.
''''Inthiscase,youwanttochangetheformname.
pDevMode.dmFormName=FormName&Chr(0)''''MustbeNULLterminated!
''''SetthedmFieldsbitflagtoindicatewhatyouarechanging.
pDevMode.dmFields=DM_FORMNAME
''''Copyyourchangesback,thenupdateDEVMODE.
CallCopyMemory(aDevMode
(1),pDevMode,Len(pDevMode))
nSize=DocumentProperties(MyhWnd,PrinterHandle,PrinterName,_
aDevMode
(1),aDevMode
(1),DM_IN_BUFFEROrDM_OUT_BUFFER)
nSize=ResetDC(hPrtDC,aDevMode
(1))''''ResettheDEVMODEfortheDC.
''''Closethehandlewhenyouarefinishedwithit.
ClosePrinter(PrinterHandle)
''''SelectionSucceeded!
ButwasFormAdded?
IfSelectForm<>FORM_ADDEDThenSelectForm=FORM_SELECTED
Else
SelectForm=FORM_NOT_SELECTED''''SelectionFailed!
EndIf
EndFunction
PublicFunctionGetFormName(ByValPrinterHandleAsLong,_
FormSizeAsSIZEL,FormNameAsString)AsInteger
DimNumFormsAsLong,IAsLong
DimFI1AsFORM_INFO_1
DimaFI1()AsFORM_INFO_1''''WorkingFI1array
DimTemp()AsByte''''TempFI1array
DimFormIndexAsInteger
DimBytesNeededAsLong
DimRetValAsLong
FormName=vbNullString
FormIndex=0
ReDimaFI1
(1)
''''FirstcallretrievestheBytesNeeded.
RetVal=EnumForms(PrinterHandle,1,aFI1(0),0&,BytesNeeded,NumForms)
ReDimTemp(BytesNeeded)
ReDimaFI1(BytesNeeded/Len(FI1))
''''Secondcallactuallyenumeratesthesupportedforms.
RetVal=EnumForms(PrinterHandle,1,Temp(0),BytesNeeded,BytesNeeded,_
NumForms)
CallCopyMemory(aFI1(0),Temp(0),BytesNeeded)
ForI=0ToNumForms-1
WithaFI1(I)
If.Size.cx=FormSize.cxAnd.Size.cy=FormSize.cyThen
''''Foundthedesiredform
FormName=PtrCtoVbString(.pName)
FormIndex=I+1
ExitFor
EndIf
EndWith
NextI
GetFormName=FormIndex''''Returnsnon-zerowhenformisfound.
EndFunction
PublicFunctionAddNewForm(PrinterHandleAsLong,FormS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 看到 一个 VB 打印 模块 保存 一下