




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Option ExplicitDeclare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle As LongDeclare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr As BooleanDeclare Function GetPhysLong Lib "WinIo
2、.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long As BooleanDeclare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long As BooleanDeclare Function GetPortV al Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As
3、 Byte As BooleanDeclare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte As BooleanDeclare Function InitializeWinIo Lib "WinIo.dll" ( As BooleanDeclare Function ShutdownWinIo Lib "WinIo.dll" ( As BooleanDeclare F
4、unction InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer As BooleanDeclare Function RemoveWinIoDriver Lib "WinIo.dll" ( As BooleanPublic IOStat As Boolean'*'* 函數(shù)名稱:GetPrnStat *'* 功能:根據(jù)打印機(jī)的內(nèi)存地址,檢測打印機(jī)的目前工作狀態(tài)*'* 參數(shù):lptport: 要檢測的打印
5、機(jī)的端口號,如LPT1: *'* 返回值:打印機(jī)的工作狀態(tài)值。*'* 0:正常1:缺紙2:無聯(lián)系3:異常(其他錯誤 *'* 調(diào)用:本模塊中的API函數(shù)InitializeWinIo和GetPortVal *'* 備注:檢測的內(nèi)存地址,是在打印端口所在的基地址上加1;*'* 作者:谷霖*'* LPT1口的基地址為&H378;LPT2口的基地址為&H278 *'*Public Function GetPrnStat(ByVal LptPort As String As LongDim PrnAddr As LongOn Err
6、or Resume NextIf IOStat = False Then IOStat = InitializeWinIo(If IOStat ThenIf UCase(LptPort = "LPT1:" ThenPrnAddr = &H379ElseIf UCase(LptPort = "LPT2:" ThenPrnAddr = &H279End IfGetPortVal PrnAddr, GetPrnStat, 1ElseGetPrnStat = &HFFGetPrnStat = GetPrnStat And &HF8
7、Select Case GetPrnStatCase &H68, &H58, &H70GetPrnStat = 1 '缺紙Case &H78GetPrnStat = 2 '無聯(lián)系Case &HD8GetPrnStat = 0 '正常Case ElseGetPrnStat = 3 '異常End SelectEnd Function'* '* 函數(shù)功能:檢查打印機(jī)的狀態(tài)主函數(shù)* '* 輸入?yún)?shù):PrintName 要檢測的打印機(jī)名稱* '* 輸出參數(shù):checkprinterr * '*
8、 檢查結(jié)果(0:正常1:打印機(jī)缺紙2:打印機(jī)無聯(lián)系3:打印機(jī)異常* '* 4:沒有安裝打印機(jī)5:打印機(jī)名稱錯誤 * '* Public Function CheckPrintErr(ByVal PrintName As String As Long'CheckPrintErr參數(shù)說明'0:沒有錯誤'1:打印機(jī)無聯(lián)系'2:打印機(jī)缺紙'3:沒有安裝打印機(jī)Dim printjieguo As LongDim i As Long, k As LongOn Error GoTo ErrCheckPrintIf Printers.Count = 0
9、ThenCheckPrintErr = 4 '沒有安裝打印機(jī)Exit FunctionEnd If'檢測發(fā)票打印機(jī)是否可以聯(lián)系For i = 0 To Printers.Count - 1If (Printers(i.DeviceName = PrintName Thenk = k + 1Exit ForEnd IfNextIf k = 0 Then '打印機(jī)名稱錯誤CheckPrintErr = 5Exit FunctionEnd IfSet Printer = Printers(iCheckPrintErr = GetPrnStat(Printer.PortExit
10、 FunctionErrCheckPrint:CheckPrintErr = 3Exit FunctionEnd Function-3號答案:編寫VB打印控制程序的幾點(diǎn)心得Visual Basic(VB給用戶提供了可視化編程環(huán)境,因其簡單易學(xué)、功能強(qiáng)大而得到了廣泛的應(yīng)用。VB提供了兩種實(shí)現(xiàn)打印的方法。一般在對打印質(zhì)量要求不高的場合,或者是編程項目的早期開發(fā)過程中,可以直接使用VB窗體的Printform方法實(shí)現(xiàn)打印。用這種方法實(shí)現(xiàn)打印具有編程簡單、易用并且功能強(qiáng)大的優(yōu)點(diǎn),它只需要通過一行代碼,幾乎能打印所有內(nèi)容。實(shí)現(xiàn)的方法就是:首先將要打印的內(nèi)容在屏幕上顯示出來,然后開發(fā)人員只要為窗體對象激活
11、PrintForm ,窗體則自動將要打印的內(nèi)容發(fā)送到Printer對象上,其語法格式如下: 窗體.PrintForm 。如果窗體中包括圖形,那么打印前應(yīng)先置窗體的AutoRedraw屬性為真。這種方法雖然簡單,但是它卻存在著內(nèi)存消耗大、打印粗糙、速度慢等缺陷,尤其對于帶有滾動條的圖像,這種方法只能打印當(dāng)前可視的區(qū)域。在實(shí)際應(yīng)用中經(jīng)常會遇到對打印質(zhì)量要求很高的場合,例如打印音樂五線譜,對打印的美觀、清晰度以及音符符頭的位置都有很嚴(yán)格的要求,這種應(yīng)用場合若采用VB提供的另一種基于Printer對象的打印方法則可以獲得高分辨率的打印,得到很高的打印質(zhì)量。在實(shí)際應(yīng)用中,也可以根據(jù)實(shí)際應(yīng)用情況將上述兩種
12、方法結(jié)合起來使用,即:前期工作使用PrintForm 簡單的打印方法將窗體的布局定下來,后期再使用基于Printer對象的打印方法實(shí)現(xiàn)最終的打印工作。2.高分辨率打印程序開發(fā)心得Printer對象VB的打印可以使用Printer對象。Printer對象是一個獨(dú)立于打印機(jī)設(shè)備的封裝,它可以代表不同的打印機(jī),初始時,Printer對象為系統(tǒng)缺省的打印機(jī),也可以使用下列語句:Set Printer=Printers(2 (其中2代表Printers集中的第二個打印機(jī)對打印機(jī)進(jìn)行指定。Printer對象具備例如:ColorMode、Copies、Duplex、Printquality等控制打印機(jī)特征的
13、屬性,提供了Newpage、EndDoc、KillDoc等控制打印過程的方法,以及大多數(shù)由窗體和圖片框控件提供的圖形屬性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它還擁有Font的所有屬性。實(shí)現(xiàn)高分辨率的打印就是通過控制Printer對象的上述屬性和方法完成的。直接利用Windows公用標(biāo)準(zhǔn)對話框CommonDialog控件【打印】VB為用戶提供了Windows公用標(biāo)準(zhǔn)對話框CommonDialog控件:【打開】、【文件另存為】、【顏色】、【字體】、【打印】。Common
14、Dialog控件在Visual Basic 和Microsoft Windows動態(tài)連接庫Commdlg.dll 例程之間提供了接口。利用公用標(biāo)準(zhǔn)對話框【打印】開發(fā)VB的打印程序,將大大縮短程序的開發(fā)周期。應(yīng)用程序中要使用公用對話框,必須首先在工具箱中添加公用對話框控件。該動作通過激活【部件】對話框,選中Microsoft Common Dialog Control6.0, 單擊【確定】即可。然后再將公用控件添加到窗體上并設(shè)置相應(yīng)屬性,該控件具有的屬性有Color、Font、Print、Help等。VB提供mnuFilePrint_Click(過程供用戶添加開發(fā)的打印程序代碼。Printer對
15、象控制打印的基本過程利用Printer對象開發(fā)的打印程序主要靠其提供的NewPage (打印新的一頁, CurrentX、CurrentY置為新頁的左上角,可完成多頁功能。、EndDoc (將打印任務(wù)加入打印機(jī)隊列、KillDoc (取消打印任務(wù)控制打印過程的。一般情況下,打印程序完成多頁打印時會多次執(zhí)行NewPage,結(jié)束時執(zhí)行一次EndDoc將打印任務(wù)加入打印機(jī)隊列。如果你在NewPage后,立即使用EndDoc,VB則不會打印額外的空白頁。如果希望顯示空白頁,則可在新的一頁上只使用Printer.Print “打印空字符即可。為了通過Printer對象實(shí)現(xiàn)文本和圖形的打印,獲得最好的打印
16、質(zhì)量,還需要對VB控制打印機(jī)的多種屬性有更深入的理解,例如打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換、打印機(jī)字體尺寸的確定等。下面給出了打印程序的主框架:Private Sub mnuFilePrint_Click(On Error Resume NextIf ActiveForm Is Nothing Then Exit SubWith dlgCommonDialog 打印機(jī)公用對話框.DialogTitle = "打印".CancelError = True.Flags = 1Printer.FontSize = dlgCommonDialog.FontSize將打印機(jī)公用對
17、話框設(shè)置的字體大小傳遞給打印機(jī).ShowPrinter 在屏幕上顯示【打印】公用對話框If Err <> MSComDlg.cdlCancel ThenPrinter.FontTransparent = False 初始化打印的字體為不透明SetPrinterScale Myform 匹配打印機(jī)的縮放屬性與窗體的屬性PrintAnywhere Printer 可放置用戶編寫的打印對象參數(shù)化例程實(shí)現(xiàn)字符和圖形的顯示Printer.NewPage 打印機(jī)坐標(biāo)初始化PrintAnywhere Printer 打印另一頁的內(nèi)容Printer.NewPage 打印機(jī)坐標(biāo)初始化Printer.
18、EndDoc 將該任務(wù)加入打印機(jī)任務(wù)隊列不打印空白頁P(yáng)rinter.KillDoc 取消當(dāng)前的打印任務(wù)End IfEnd WithEnd Sub參數(shù)化繪圖程序用VB開發(fā)應(yīng)用程序時,如果使用參數(shù)化繪圖例程進(jìn)行屏幕顯示程序的開發(fā),則在開發(fā)打印程序時,就不需再另行開發(fā)代碼,從而避免了大量的重復(fù)勞動,有效地縮短了程序的開發(fā)周期。參數(shù)化繪圖例程就是:在開發(fā)例程時,為每一個例行程序提供一個OBJECT類型的參數(shù),調(diào)用程序通過向例程的OBJECT類型參數(shù)分別傳遞窗體、Printer對象,就可分別完成屏幕顯示與打印機(jī)輸出。見如下示例:Sub PrintAnywhere(Dest As ObjectDest.P
19、rint “HELLO!”Dest Is Printer ThenPrinter.EndDocEnd IfEnd Sub要完成屏幕上的輸出,調(diào)用PrintAnywhere Myform 即可,而調(diào)用PrintAnywhere Printer 則完成在打印機(jī)上輸出。屬性匹配與窗體縮放因?yàn)榭刂拼蛴C(jī)實(shí)際繪圖區(qū)域大小的屬性Height和Width,由目前正在使用的紙張決定,而且可打印的區(qū)域與紙張邊緣有一定距離。因而為了獲得正確的打印輸出結(jié)果,不能簡單地將Printer對象直接傳遞給繪圖例行程序,還必須要解決打印機(jī)的縮放屬性與顯示窗體屬性相匹配的問題。即:保證使窗體中的打印內(nèi)容以正確的大小顯示,并居于
20、可打印區(qū)域的中間。實(shí)際上實(shí)現(xiàn)的是打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換。具體過程是:使用打印機(jī)的ScaleX 和ScaleY方法,獲取以twip為單位的打印機(jī)尺寸,再利用窗體的ScaleX和ScaleY方法將這些尺寸轉(zhuǎn)換為窗體中的坐標(biāo)系統(tǒng),從而實(shí)現(xiàn)以窗體的坐標(biāo)系統(tǒng)提供打印機(jī)可打印區(qū)域大小的目的。然后,用這些尺寸作為打印機(jī)中新的ScaleWidth和ScaleHeight,即可實(shí)現(xiàn)屬性匹配。但是,我們在打印時,經(jīng)常會遇到這樣的場合在不改變窗體形狀的情況下,需要擴(kuò)大或縮小窗體的大小。要完成這樣的工作,不僅需要完成屬性匹配,還要確定對象被縮放的系數(shù)。程序如下:Private Sub SetPrinte
21、rScale(obj As ObjectDim pwid As Single, phgt As Single, xmid As Single, ymid As SingleDim owid As Single, ohgt As Singleowid = obj.ScaleX(obj.ScaleWidth, obj.ScaleMode, vbTwipsohgt = obj.ScaleY(obj.ScaleHeight, obj.ScaleMode, vbTwips獲取窗體以Twips表示的尺寸pwid = Printer.ScaleX(Printer.ScaleWidth, Printer.Sc
22、aleMode, vbTwipsphgt = Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbTwips獲取打印機(jī)以Twips表示的尺寸If (ohgt / owid > phgt / pwid Thens = phgt / ohgtElses = pwid / owidEnd If 計算縮放因子pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode / sphgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode / s將打印機(jī)的尺寸轉(zhuǎn)換成obj的坐標(biāo)系統(tǒng)/ 縮放因子x_mid = obj.ScaleLeft + obj.ScaleWidth / 2y_mid = obj.ScaleTop + obj.ScaleHeight / 2設(shè)置打印區(qū)域的中心點(diǎn)坐標(biāo)Printer.Scale (x_mid - pwid / 2, y_mid - phgt / 2-(x_mid + pwid / 2, y_mid + phgt / 2 設(shè)置打印機(jī)中新的 ScaleWidth 和 ScaleHeight End Sub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年組織行為學(xué)與人力資源管理考試試題及答案
- 2025年人力資源管理考試題目及答案
- 2025年土木工程師考試卷及答案
- 2025年社會工作者初級考試試題及答案
- 2025年古建筑保護(hù)與修復(fù)專業(yè)考試題及答案
- 2025年古代文學(xué)與現(xiàn)代文學(xué)考試題目及答案
- 2025年金融科技相關(guān)考試題及答案
- 斗齒綠色鑄造技術(shù)
- 阿托品考試題庫及答案
- 三人合伙協(xié)議書
- stype kit操作手冊第一步調(diào)整水平平衡儀
- 眼球的結(jié)構(gòu)與功能
- YS/T 22-2010銻酸鈉
- 三乙胺安全標(biāo)簽
- GB/T 4490-2021織物芯輸送帶寬度和長度
- GB/T 3299-2011日用陶瓷器吸水率測定方法
- GB/T 18867-2014電子工業(yè)用氣體六氟化硫
- FZ/T 51011-2014纖維級聚己二酰己二胺切片
- ICU常見檢查項目及課件
- 《月光下的中國》朗誦稿
- 土地荒漠化的防治(公開課)課件
評論
0/150
提交評論