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
 
 
posted @ 2014-07-28 22:37  不平凡总在于坚持!  阅读(3250)  评论(3编辑  收藏  举报