热情软件屋

 

报表打印时,程序显示Orientation为只读属性不能修改


编号:QA002085
建立日期: 1999年11月24日 最后修改日期:2002年1月29日
所属类别:

jinjie:
    操作系统:win98
    工具:vb6.0
    问题:报表打印时,编程控制纸张纵向和横向的打印方式。但当我设定
    Printer.Orientation = vbPRORLandscape 后,程序运行显示Orientation为
    只读属性不能修改。请问该如何用编程控制纸张纵向和横向的打印?

回答:

    方法一:用一个CommonDialog:
    
    Private Sub Command1_Click()
    CommonDialog1.Flags = cdlPDPrintSetup
    CommonDialog1.CancelError = True
    On Error GoTo ErrorHandle:
    CommonDialog1.ShowPrinter '必须Show出来且"确定"才能修改纸方向
    'Me.Refresh
    'Command1.Refresh
    On Error GoTo 0
    DataReport1.Show vbModal
    ErrorHandle:
    End Sub
    下载例程rptdemo.zip
    方法二:引用 PageSet.Dll(参考:微软的Knowledge Base的文章:“Q198901 ample PageSet_exe Programmatically Changes Default Printer Orientation”并下载PageSet.exe,或orientation.zip
    但有时报出"报表宽度大于纸的宽度"的错误。(参考:微软的Knowledge Base的文章:“Q197915 RB Report Width is Larger than the Paper Width”(我认为没什么用,不知所云))
    该方法并未真正将Printer改方向(即:Printer.Width与Printer.Height并未交换),因此我建议:
    Private Sub DataReport_Initialize()
     Const ErrX = 0 '误差经验值
     Dim adoRecordset As New ADODB.Recordset
     adoRecordset.Fields.Append "Fld1", adVariant, , adFldIsNullable + adFldMayBeNull
     adoRecordset.Open
     Set Me.DataSource = adoRecordset
     '下一句非常关键重要,可以极大地减少"报表宽度大于纸的宽度"的错误!
     '当Form1.Option1.Value为真时"横打",否则"纵打"
     Me.ReportWidth = IIf(Form1.Option1.Value, MyMax(Printer.Width, Printer.Height),
     MyMin(Printer.Width, Printer.Height)) - Me.LeftMargin - Me.RightMargin-ErrX
    End Sub
    Private Function MyMax(a As Long, b As Long) As Long
     MyMax = IIf(a > b, a, b)
    End Function
    Private Function MyMin(a As Long, b As Long) As Long
     MyMin = IIf(a < b, a, b)
    End Function
    这样就可以极大地减少"报表宽度大于纸的宽度"的错误!
    注:"横打"即:打印以纸的宽边作顶部。 "纵打"即:打印以纸的窄边作顶部。
    
    bigbigFan的意见:
    下载VB6的SP5补丁(http://msdn.microsoft.com/vstudio/sp/default.asp),它有修正报表不能设置横向的错误。

此问题由于溪玥回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio