• 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
     
     
  • 相关阅读:
    如何快速部署Oracle Database
    有关Oracle统计信息的知识点
    索引的重建
    利用Openfiler配置基于文件系统的网络存储
    Linux命令(007) -- systemctl
    使用mysqldump导出数据库(表)
    文件处理.Windows.Fastcopy.3.50.x64.文件复制简体中文破解版(验证版)
    oracle 修改数据 保险方法
    oracle存储过程、声明变量、for循环--后期添加游标 if 、decode、 case when
    Oracle 游标使用全解
  • 原文地址:https://www.cnblogs.com/yhsc/p/3874240.html
Copyright © 2020-2023  润新知