报表打印时,程序显示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),它有修正报表不能设置横向的错误。
此问题由于溪玥回答。
| |
|
|
| |
|
|