VB6-系統打印常識


在一次做圖片打印的時候,對位置的調整老是不得法,后來通過CBM666老師的幫助才解決問題,分享以下他給的幫助。

 
 
'PaintPicture pic, destX, destY, destWidth, destHeight, scrX, scrY, scrWidth, scrHeight
'其中Pic:為圖片對象, 如圖形框Picture等;
'destX,destY:目標圖像位置;
'destWidth,destHeight:目標圖像尺寸;
'scrX,scrY:原圖像的裁剪坐標;
'scrWidth,scrHeight:原圖像的裁剪尺寸;

Printer.PaintPicture picA.Picture, 200200, picA.Width / 2, picA.Height / 2
Printer.EndDoc
 
 
'VB 打印圖片
 
Private Sub Command1_Click()
    On Error GoTo Err1
    If Picture1.Picture <> LoadPicture(""Then
        Printer.PaintPicture Picture1.Picture, 200, Picture1.Top + 1000  '打印圖片
    Else
        MsgBox "沒有可打印的圖片"16"提示"
    End If
    Printer.EndDoc  '打印結束
     Exit Sub
Err1:
    MsgBox Err.Description, 16"提示"  '錯誤處理
End Sub
 
 

【屬性匹配與窗體縮放】
因為控制打印機實際繪圖區域大小的屬性Height和Width,由目前正在使用的紙張決定,而且可打印的區域與紙張邊緣有一定距離。因而為了獲得正確的打印輸出結果,不能簡單地將Printer對象直接傳遞給繪圖例行程序,還必須要解決打印機的縮放屬性與顯示窗體屬性相匹配的問題。即:保證使窗體中的打印內容以正確的大小顯示,並居於可打印區域的中間。實際上實現的是打印機的坐標體系向屏幕坐標體系的轉換。具體過程是:使用打印機的ScaleX和ScaleY方法,獲取以twip為單位的打印機尺寸,再利用窗體的ScaleX和ScaleY方法將這些尺寸轉換為窗體中的坐標系統,從而實現以窗體的坐標系統提供打印機可打印區域大小的目的。然后,用這些尺寸作為打印機中新的ScaleWidth和ScaleHeight,即可實現屬性匹配。
但是,我們在打印時,經常會遇到這樣的場合——在不改變窗體形狀的情況下,需要擴大或縮小窗體的大小。要完成這樣的工作,不僅需要完成屬性匹配,還要確定對象被縮放的系數。程序如下:

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)
'獲取打印機以Twips表示的尺寸
If (ohgt / owid > phgt / pwid) Then
    s = phgt / ohgt
Else
    s = pwid / owid
End If      ‘'計算縮放因子
pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode) / s
phgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode) / s
             '將打印機的尺寸轉換成obj的坐標系統 / 縮放因子
x_mid = obj.ScaleLeft + obj.ScaleWidth / 2
y_mid = obj.ScaleTop + obj.ScaleHeight / 2 '設置打印區域的中心點坐標
Printer.Scale (x_mid - pwid / 2, y_mid - phgt / 2)-(x_mid + pwid / 2, y_mid + phgt / 2)
           '設置打印機中新的ScaleWidth和ScaleHeight
End Sub
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM