四虎成人免费视频,国产一级a作爱视频免费观9看,色五月丁香亚洲,亚洲欧美性爱在线视频,1000部黄片免费观看一区,国产亚洲性生活视频播放,三级黄色在线视频网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)信息技術(shù)>編寫VB打印控制程序的幾點(diǎn)心得

編寫VB打印控制程序的幾點(diǎn)心得

時(shí)間:2023-02-21 00:10:27 計(jì)算機(jī)信息技術(shù) 我要投稿
  • 相關(guān)推薦

編寫VB打印控制程序的幾點(diǎn)心得

編寫VB打印控制程序的幾點(diǎn)心得

   鄭州解放軍信息工程大學(xué)信息安全學(xué)院計(jì)算機(jī)系(450002)

  燕  王  鵬

摘 要 本文在總結(jié)作者實(shí)際開發(fā)經(jīng)驗(yàn)的基礎(chǔ)上,詳細(xì)介紹了VB實(shí)現(xiàn)高分辨率打印方法的幾點(diǎn)心得。闡述了參數(shù)化繪圖程序縮短打印程序開發(fā)時(shí)間的方法以及打印機(jī)縮放屬性與窗體屬性匹配使用的技巧,并總結(jié)了解決坐標(biāo)定位、圖形與其實(shí)際打印位置出現(xiàn)誤差等問(wèn)題的經(jīng)驗(yàn)。
關(guān)鍵詞  PrintForm  高分辨率打印 參數(shù)化繪圖 縮放屬性

Some Experiences on VB Print Control  

Bai Yang, Wang Peng

Computer Science Department

University of Information and Engineering

Zhengzhou, China

Abstract: On the basis of our working experiences, we have given a detail description about VB print method of  high resolution. We focus on  how to shorten 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 attribute 

1.簡(jiǎn)介

Visual Basic(VB)給用戶提供了可視化編程環(huán)境,因其簡(jiǎn)單易學(xué)、功能強(qiáng)大而得到了廣泛的應(yīng)用。VB提供了兩種實(shí)現(xiàn)打印的方法。一般在對(duì)打印質(zhì)量要求不高的場(chǎng)合,或者是編程項(xiàng)目的早期開發(fā)過(guò)程中,可以直接使用VB窗體的Printform方法實(shí)現(xiàn)打印。用這種方法實(shí)現(xiàn)打印具有編程簡(jiǎn)單、易用并且功能強(qiáng)大的優(yōu)點(diǎn),它只需要通過(guò)一行代碼,幾乎能打印所有內(nèi)容。實(shí)現(xiàn)的方法就是:首先將要打印的內(nèi)容在屏幕上顯示出來(lái),然后開發(fā)人員只要為窗體對(duì)象激活  PrintForm ,窗體則自動(dòng)將要打印的內(nèi)容發(fā)送到Printer對(duì)象上,其語(yǔ)法格式如下:[窗體.]PrintForm 。如果窗體中包括圖形,那么打印前應(yīng)先置窗體的AutoRedraw屬性為真。這種方法雖然簡(jiǎn)單,但是它卻存在著內(nèi)存消耗大、打印粗糙、速度慢等缺陷,尤其對(duì)于帶有滾動(dòng)條的圖像,這種方法只能打印當(dāng)前可視的區(qū)域。在實(shí)際應(yīng)用中經(jīng)常會(huì)遇到對(duì)打印質(zhì)量要求很高的場(chǎng)合,例如打印音樂(lè)五線譜,對(duì)打印的美觀、清晰度以及音符符頭的位置都有很嚴(yán)格的要求,這種應(yīng)用場(chǎng)合若采用VB提供的另一種基于Printer對(duì)象的打印方法則可以獲得高分辨率的打印,得到很高的打印質(zhì)量。在實(shí)際應(yīng)用中,也可以根據(jù)實(shí)際應(yīng)用情況將上述兩種方法結(jié)合起來(lái)使用,即:前期工作使用PrintForm 簡(jiǎn)單的打印方法將窗體的布局定下來(lái),后期再使用基于Printer對(duì)象的打印方法實(shí)現(xiàn)最終的打印工作。

2.高分辨率打印程序開發(fā)心得

Printer對(duì)象

VB的打印可以使用Printer對(duì)象。Printer對(duì)象是一個(gè)獨(dú)立于打印機(jī)設(shè)備的封裝,它可以代表不同的打印機(jī),初始時(shí),Printer對(duì)象為系統(tǒng)缺省的打印機(jī),也可以使用下列語(yǔ)句:Set  Printer=Printers(2) (其中2代表Printers集中的第二個(gè)打印機(jī))對(duì)打印機(jī)進(jìn)行指定。

Printer對(duì)象具備例如:ColorMode、Copies、Duplex、Printquality等控制打印機(jī)特征的屬性,提供了Newpage、EndDoc、KillDoc等控制打印過(guò)程的方法,以及大多數(shù)由窗體和圖片框控件提供的圖形屬性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它還擁有Font的所有屬性。實(shí)現(xiàn)高分辨率的打印就是通過(guò)控制Printer對(duì)象的上述屬性和方法完成的。

⑵ 直接利用Windows公用標(biāo)準(zhǔn)對(duì)話框CommonDialog控件【打印】

VB為用戶提供了Windows公用標(biāo)準(zhǔn)對(duì)話框CommonDialog控件:【打開】、【文件另存為】、【顏色】、【字體】、【打印】。CommonDialog控件在Visual Basic 和Microsoft Windows動(dòng)態(tài)連接庫(kù)Commdlg.dll例程之間提供了接口。利用公用標(biāo)準(zhǔn)對(duì)話框【打印】開發(fā)VB的打印程序,將大大縮短程序的開發(fā)周期。應(yīng)用程序中要使用公用對(duì)話框,必須首先在工具箱中添加公用對(duì)話框控件。該動(dòng)作通過(guò)激活【部件】對(duì)話框,選中Microsoft Common Dialog Control6.0, 單擊【確定】即可。然后再將公用控件添加到窗體上并設(shè)置相應(yīng)屬性,該控件具有的屬性有Color、Font、Print、Help等。

VB提供mnuFilePrint_Click()過(guò)程供用戶添加開發(fā)的打印程序代碼。

Printer對(duì)象控制打印的基本過(guò)程

利用Printer對(duì)象開發(fā)的打印程序主要靠其提供的——NewPage (打印新的一頁(yè),CurrentX、CurrentY置為新頁(yè)的左上角,可完成多頁(yè)功能。)、EndDoc  (將打印任務(wù)加入打印機(jī)隊(duì)列)、KillDoc  (取消打印任務(wù))控制打印過(guò)程的。一般情況下,打印程序完成多頁(yè)打印時(shí)會(huì)多次執(zhí)行NewPage,結(jié)束時(shí)執(zhí)行一次EndDoc將打印任務(wù)加入打印機(jī)隊(duì)列。如果你在NewPage后,立即使用EndDoc,VB則不會(huì)打印額外的空白頁(yè)。如果希望顯示空白頁(yè),則可在新的一頁(yè)上只使用Printer.Print “  “打印空字符即可。

為了通過(guò)Printer

對(duì)象實(shí)現(xiàn)文本和圖形的打印,獲得最好的打印質(zhì)量,還需要對(duì)VB控制打印機(jī)的多種屬性有更深入的理解,例如打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換、打印機(jī)字體尺寸的確定等。下面給出了打印程序的主框架:

Private Sub mnuFilePrint_Click()

    On Error Resume Next

    If ActiveForm Is Nothing Then Exit Sub

    With dlgCommonDialog            ‘打印機(jī)公用對(duì)話框

        .DialogTitle = "打印"

        .CancelError = True

        .Flags = 1

         Printer.FontSize = dlgCommonDialog.FontSize    

‘將打印機(jī)公用對(duì)話框設(shè)置的字體大小傳遞給打印機(jī)

         .ShowPrinter      ‘ 在屏幕上顯示【打印】公用對(duì)話框

         If Err <> MSComDlg.cdlCancel Then

            Printer.FontTransparent = False   ‘初始化打印的字體為不透明

            SetPrinterScale Myform    ‘匹配打印機(jī)的縮放屬性與窗體的屬性

            PrintAnywhere Printer       ‘可放置用戶編寫的打印對(duì)象參數(shù)化例程

                                      ‘實(shí)現(xiàn)字符和圖形的顯示

Printer.NewPage           ‘打印機(jī)坐標(biāo)初始化

PrintAnywhere Printer     ‘打印另一頁(yè)的內(nèi)容

Printer.NewPage           ‘打印機(jī)坐標(biāo)初始化

            Printer.EndDoc             ‘將該任務(wù)加入打印機(jī)任務(wù)隊(duì)列

‘ 不打印空白頁(yè)

            Printer.KillDoc           ‘取消當(dāng)前的打印任務(wù)

        End If

    End With

  End Sub

參數(shù)化繪圖程序

VB開發(fā)應(yīng)用程序時(shí),如果使用參數(shù)化繪圖例程進(jìn)行屏幕顯示程序的開發(fā),則在開發(fā)打印程序時(shí),就不需再另行開發(fā)代碼,從而避免了大量的重復(fù)勞動(dòng),有效地縮短了程序的開發(fā)周期。

參數(shù)化繪圖例程就是:在開發(fā)例程時(shí),為每一個(gè)例行程序提供一個(gè)OBJECT類型的參數(shù),調(diào)用程序通過(guò)向例程的OBJECT類型參數(shù)分別傳遞窗體、Printer對(duì)象,就可分別完成屏幕顯示與打印機(jī)輸出。 見如下示例:

Sub   PrintAnywhere(Dest As Object)

Dest.Print “HELLO!”

Dest Is Printer Then

        Printer.EndDoc

End  If

End Sub

要完成屏幕上的輸出,調(diào)用 PrintAnywhere Myform 即可,而調(diào)用 PrintAnywhere  Printer則完成在打印機(jī)上輸出。

⑸ 屬性匹配與窗體縮放

因?yàn)榭刂拼蛴C(jī)實(shí)際繪圖區(qū)域大小的屬性Height和Width,由目前正在使用的紙張決定,而且可打印的區(qū)域與紙張邊緣有一定距離。因而為了獲得正確的打印輸出結(jié)果,不能簡(jiǎn)單地將Printer對(duì)象直接傳遞給繪圖例行程序,還必須要解決打印機(jī)的縮放屬性與顯示窗體屬性相匹配的問(wèn)題。即:保證使窗體中的打印內(nèi)容以正確的大小顯示,并居于可打印區(qū)域的中間。實(shí)際上實(shí)現(xiàn)的是打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換。具體過(guò)程是:使用打印機(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)屬性匹配。

但是,我們?cè)诖蛴r(shí),經(jīng)常會(huì)遇到這樣的場(chǎng)合——在不改變窗體形狀的情況下,需要擴(kuò)大或縮小窗體的大小。要完成這樣的工作,不僅需要完成屬性匹配,還要確定對(duì)象被縮放的系數(shù)。程序如下:

Private Sub SetPrinterScale(obj As Object)

Dim pwid As Single, phgt As Single, xmid As Single, ymid As Single

Dim owid As Single, ohgt As Single

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)

‘獲取打印機(jī)以Twips表示的尺寸

If (ohgt / owid > phgt / pwid) Then

    s = phgt / ohgt

Else

 

   s = pwid / owid

End If      ‘計(jì)算縮放因子

pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode) / s

phgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode) / s

             ‘將打印機(jī)的尺寸轉(zhuǎn)換成obj的坐標(biāo)系統(tǒng) / 縮放因子

x_mid = obj.ScaleLeft + obj.ScaleWidth / 2

y_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

     坐標(biāo)定位

   

《編寫VB打印控制程序的幾點(diǎn)心得.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【編寫VB打印控制程序的幾點(diǎn)心得】相關(guān)文章:

關(guān)于高中地理教材重新編寫的幾點(diǎn)思考08-07

職高VB教學(xué)心得08-24

vb實(shí)訓(xùn)心得11-25

申論復(fù)習(xí)的幾點(diǎn)心得08-24

班級(jí)管理幾點(diǎn)心得07-14

VB學(xué)習(xí)心得體會(huì)08-18

《編寫童話》08-15

心得:關(guān)于英語(yǔ)學(xué)習(xí)的幾點(diǎn)建議08-19

幼兒鋼琴教學(xué)的幾點(diǎn)心得08-21

編寫VB打印控制程序的幾點(diǎn)心得

編寫VB打印控制程序的幾點(diǎn)心得

   鄭州解放軍信息工程大學(xué)信息安全學(xué)院計(jì)算機(jī)系(450002)

  燕  王  鵬

摘 要 本文在總結(jié)作者實(shí)際開發(fā)經(jīng)驗(yàn)的基礎(chǔ)上,詳細(xì)介紹了VB實(shí)現(xiàn)高分辨率打印方法的幾點(diǎn)心得。闡述了參數(shù)化繪圖程序縮短打印程序開發(fā)時(shí)間的方法以及打印機(jī)縮放屬性與窗體屬性匹配使用的技巧,并總結(jié)了解決坐標(biāo)定位、圖形與其實(shí)際打印位置出現(xiàn)誤差等問(wèn)題的經(jīng)驗(yàn)。
關(guān)鍵詞  PrintForm  高分辨率打印 參數(shù)化繪圖 縮放屬性

Some Experiences on VB Print Control  

Bai Yang, Wang Peng

Computer Science Department

University of Information and Engineering

Zhengzhou, China

Abstract: On the basis of our working experiences, we have given a detail description about VB print method of  high resolution. We focus on  how to shorten 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 attribute 

1.簡(jiǎn)介

Visual Basic(VB)給用戶提供了可視化編程環(huán)境,因其簡(jiǎn)單易學(xué)、功能強(qiáng)大而得到了廣泛的應(yīng)用。VB提供了兩種實(shí)現(xiàn)打印的方法。一般在對(duì)打印質(zhì)量要求不高的場(chǎng)合,或者是編程項(xiàng)目的早期開發(fā)過(guò)程中,可以直接使用VB窗體的Printform方法實(shí)現(xiàn)打印。用這種方法實(shí)現(xiàn)打印具有編程簡(jiǎn)單、易用并且功能強(qiáng)大的優(yōu)點(diǎn),它只需要通過(guò)一行代碼,幾乎能打印所有內(nèi)容。實(shí)現(xiàn)的方法就是:首先將要打印的內(nèi)容在屏幕上顯示出來(lái),然后開發(fā)人員只要為窗體對(duì)象激活  PrintForm ,窗體則自動(dòng)將要打印的內(nèi)容發(fā)送到Printer對(duì)象上,其語(yǔ)法格式如下:[窗體.]PrintForm 。如果窗體中包括圖形,那么打印前應(yīng)先置窗體的AutoRedraw屬性為真。這種方法雖然簡(jiǎn)單,但是它卻存在著內(nèi)存消耗大、打印粗糙、速度慢等缺陷,尤其對(duì)于帶有滾動(dòng)條的圖像,這種方法只能打印當(dāng)前可視的區(qū)域。在實(shí)際應(yīng)用中經(jīng)常會(huì)遇到對(duì)打印質(zhì)量要求很高的場(chǎng)合,例如打印音樂(lè)五線譜,對(duì)打印的美觀、清晰度以及音符符頭的位置都有很嚴(yán)格的要求,這種應(yīng)用場(chǎng)合若采用VB提供的另一種基于Printer對(duì)象的打印方法則可以獲得高分辨率的打印,得到很高的打印質(zhì)量。在實(shí)際應(yīng)用中,也可以根據(jù)實(shí)際應(yīng)用情況將上述兩種方法結(jié)合起來(lái)使用,即:前期工作使用PrintForm 簡(jiǎn)單的打印方法將窗體的布局定下來(lái),后期再使用基于Printer對(duì)象的打印方法實(shí)現(xiàn)最終的打印工作。

2.高分辨率打印程序開發(fā)心得

Printer對(duì)象

VB的打印可以使用Printer對(duì)象。Printer對(duì)象是一個(gè)獨(dú)立于打印機(jī)設(shè)備的封裝,它可以代表不同的打印機(jī),初始時(shí),Printer對(duì)象為系統(tǒng)缺省的打印機(jī),也可以使用下列語(yǔ)句:Set  Printer=Printers(2) (其中2代表Printers集中的第二個(gè)打印機(jī))對(duì)打印機(jī)進(jìn)行指定。

Printer對(duì)象具備例如:ColorMode、Copies、Duplex、Printquality等控制打印機(jī)特征的屬性,提供了Newpage、EndDoc、KillDoc等控制打印過(guò)程的方法,以及大多數(shù)由窗體和圖片框控件提供的圖形屬性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它還擁有Font的所有屬性。實(shí)現(xiàn)高分辨率的打印就是通過(guò)控制Printer對(duì)象的上述屬性和方法完成的。

⑵ 直接利用Windows公用標(biāo)準(zhǔn)對(duì)話框CommonDialog控件【打印】

VB為用戶提供了Windows公用標(biāo)準(zhǔn)對(duì)話框CommonDialog控件:【打開】、【文件另存為】、【顏色】、【字體】、【打印】。CommonDialog控件在Visual Basic 和Microsoft Windows動(dòng)態(tài)連接庫(kù)Commdlg.dll例程之間提供了接口。利用公用標(biāo)準(zhǔn)對(duì)話框【打印】開發(fā)VB的打印程序,將大大縮短程序的開發(fā)周期。應(yīng)用程序中要使用公用對(duì)話框,必須首先在工具箱中添加公用對(duì)話框控件。該動(dòng)作通過(guò)激活【部件】對(duì)話框,選中Microsoft Common Dialog Control6.0, 單擊【確定】即可。然后再將公用控件添加到窗體上并設(shè)置相應(yīng)屬性,該控件具有的屬性有Color、Font、Print、Help等。

VB提供mnuFilePrint_Click()過(guò)程供用戶添加開發(fā)的打印程序代碼。

Printer對(duì)象控制打印的基本過(guò)程

利用Printer對(duì)象開發(fā)的打印程序主要靠其提供的——NewPage (打印新的一頁(yè),CurrentX、CurrentY置為新頁(yè)的左上角,可完成多頁(yè)功能。)、EndDoc  (將打印任務(wù)加入打印機(jī)隊(duì)列)、KillDoc  (取消打印任務(wù))控制打印過(guò)程的。一般情況下,打印程序完成多頁(yè)打印時(shí)會(huì)多次執(zhí)行NewPage,結(jié)束時(shí)執(zhí)行一次EndDoc將打印任務(wù)加入打印機(jī)隊(duì)列。如果你在NewPage后,立即使用EndDoc,VB則不會(huì)打印額外的空白頁(yè)。如果希望顯示空白頁(yè),則可在新的一頁(yè)上只使用Printer.Print “  “打印空字符即可。

為了通過(guò)Printer

對(duì)象實(shí)現(xiàn)文本和圖形的打印,獲得最好的打印質(zhì)量,還需要對(duì)VB控制打印機(jī)的多種屬性有更深入的理解,例如打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換、打印機(jī)字體尺寸的確定等。下面給出了打印程序的主框架:

Private Sub mnuFilePrint_Click()

    On Error Resume Next

    If ActiveForm Is Nothing Then Exit Sub

    With dlgCommonDialog            ‘打印機(jī)公用對(duì)話框

        .DialogTitle = "打印"

        .CancelError = True

        .Flags = 1

         Printer.FontSize = dlgCommonDialog.FontSize    

‘將打印機(jī)公用對(duì)話框設(shè)置的字體大小傳遞給打印機(jī)

         .ShowPrinter      ‘ 在屏幕上顯示【打印】公用對(duì)話框

         If Err <> MSComDlg.cdlCancel Then

            Printer.FontTransparent = False   ‘初始化打印的字體為不透明

            SetPrinterScale Myform    ‘匹配打印機(jī)的縮放屬性與窗體的屬性

            PrintAnywhere Printer       ‘可放置用戶編寫的打印對(duì)象參數(shù)化例程

                                      ‘實(shí)現(xiàn)字符和圖形的顯示

Printer.NewPage           ‘打印機(jī)坐標(biāo)初始化

PrintAnywhere Printer     ‘打印另一頁(yè)的內(nèi)容

Printer.NewPage           ‘打印機(jī)坐標(biāo)初始化

            Printer.EndDoc             ‘將該任務(wù)加入打印機(jī)任務(wù)隊(duì)列

‘ 不打印空白頁(yè)

            Printer.KillDoc           ‘取消當(dāng)前的打印任務(wù)

        End If

    End With

  End Sub

參數(shù)化繪圖程序

VB開發(fā)應(yīng)用程序時(shí),如果使用參數(shù)化繪圖例程進(jìn)行屏幕顯示程序的開發(fā),則在開發(fā)打印程序時(shí),就不需再另行開發(fā)代碼,從而避免了大量的重復(fù)勞動(dòng),有效地縮短了程序的開發(fā)周期。

參數(shù)化繪圖例程就是:在開發(fā)例程時(shí),為每一個(gè)例行程序提供一個(gè)OBJECT類型的參數(shù),調(diào)用程序通過(guò)向例程的OBJECT類型參數(shù)分別傳遞窗體、Printer對(duì)象,就可分別完成屏幕顯示與打印機(jī)輸出。 見如下示例:

Sub   PrintAnywhere(Dest As Object)

Dest.Print “HELLO!”

Dest Is Printer Then

        Printer.EndDoc

End  If

End Sub

要完成屏幕上的輸出,調(diào)用 PrintAnywhere Myform 即可,而調(diào)用 PrintAnywhere  Printer則完成在打印機(jī)上輸出。

⑸ 屬性匹配與窗體縮放

因?yàn)榭刂拼蛴C(jī)實(shí)際繪圖區(qū)域大小的屬性Height和Width,由目前正在使用的紙張決定,而且可打印的區(qū)域與紙張邊緣有一定距離。因而為了獲得正確的打印輸出結(jié)果,不能簡(jiǎn)單地將Printer對(duì)象直接傳遞給繪圖例行程序,還必須要解決打印機(jī)的縮放屬性與顯示窗體屬性相匹配的問(wèn)題。即:保證使窗體中的打印內(nèi)容以正確的大小顯示,并居于可打印區(qū)域的中間。實(shí)際上實(shí)現(xiàn)的是打印機(jī)的坐標(biāo)體系向屏幕坐標(biāo)體系的轉(zhuǎn)換。具體過(guò)程是:使用打印機(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)屬性匹配。

但是,我們?cè)诖蛴r(shí),經(jīng)常會(huì)遇到這樣的場(chǎng)合——在不改變窗體形狀的情況下,需要擴(kuò)大或縮小窗體的大小。要完成這樣的工作,不僅需要完成屬性匹配,還要確定對(duì)象被縮放的系數(shù)。程序如下:

Private Sub SetPrinterScale(obj As Object)

Dim pwid As Single, phgt As Single, xmid As Single, ymid As Single

Dim owid As Single, ohgt As Single

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)

‘獲取打印機(jī)以Twips表示的尺寸

If (ohgt / owid > phgt / pwid) Then

    s = phgt / ohgt

Else

 

   s = pwid / owid

End If      ‘計(jì)算縮放因子

pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode) / s

phgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode) / s

             ‘將打印機(jī)的尺寸轉(zhuǎn)換成obj的坐標(biāo)系統(tǒng) / 縮放因子

x_mid = obj.ScaleLeft + obj.ScaleWidth / 2

y_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

     坐標(biāo)定位