100分在线等候,救命求救:问什么下面的代码打不出来横板的东西?
With Printer
.PaperSize = vbPRPSA4
'.ScaleMode = vbTwips
.Orientation = 2 ‘横板
.FontBold = True
.ScaleLeft = 0
.ScaleTop = -800
.ScaleWidth = 16840
.ScaleHeight = 11907
.CurrentX = 0
.CurrentY = 0
'.DrawWidth = 1
End With
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
上面的代码现在怎么打印都是竖着的救命呀大侠们
With Printer
.PaperSize = vbPRPSA4
'.ScaleMode = vbTwips
.Orientation = 2 ‘横板
.FontBold = True
.ScaleLeft = 0
.ScaleTop = -800
.ScaleWidth = 16840
.ScaleHeight = 11907
.CurrentX = 0
.CurrentY = 0
'.DrawWidth = 1
End With
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
上面的代码现在怎么打印都是竖着的救命呀大侠们
Printer 对象的此属性的效果依赖于打印机厂商提供的驱动程序。某些属性设置值可能不起作用,或者一些不同的属性设置值可能有相同的效果。可接受范围之外的设置值可能产生也可能不产生错误。详细信息,请参阅厂家的具体驱动程序的文档
大部分的驱动程序应该是一样的设置吧。设置成cdlLandScape,大部分的应该好用吧。。
如果不行的话,有没有VB自带的其他的打印的对象可用?(第三方的不可以)
2.我先画出个横板的表格图片,然后就打印这个表格图片,图片内容如下:
3.客户机不安装OFFICE,并且要求表头,和页码,所以要画成图片必须横板打印,打印过程不能给任何人添加麻烦,所以只能在打印程序内设置成横板的。请问有什么很好的办法么?
With Printer
...
On Error Resume Next
.Orientation = vbPRORLandscape
If Err.Number <> 0 Then
MsgBox Err.Number & " : " & Err.Description, vbCritical
End If
On Error GoTo 0
...
End With
line()可以画图片框,也可以画打印机格式如下:picture1.line(......)'在图片框上画线
printer.line(....)'在打印机上画线
所以你根本没必要去生成图片再打印.
line()可以画图片框,也可以画打印机格式如下: picture1.line(......)'在图片框上画线
printer.line(....)'在打印机上画线
所以你根本没必要去生成图片再打印.
object送Picture则画Picture,送printer则画打印机. Option Explicit
Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection
Const UNIT_CM = 567 '-------------------------设置每厘米等于567个缇
Const TABLE_TOP = 800 '-----------------------表上边距
Const hs = 33 '-------------------------------表的总行数
Dim Page1 As LongPrivate Sub drawTable(ByVal obj As Object, ByVal table_Header As String)
'*----------------------------------------------------------*
'| 入口参数: |
'| obj 发送的对象 |
'| table_Header 发送的表头 |
'| 出口参数: |
'| 无 |
'*----------------------------------------------------------*
If rst.EOF Then Exit Sub
If obj Is Pic1 Then
Pic1.Visible = False
Pic1.Cls
End If
'*===================== 画报表 ========================* Dim iRows As Single '------------------------表行总高度
Dim iRow(0 To hs + 1) As Single '------------表的每行高
Dim iCols As Single '-----------------------表列总宽度
Dim iCol(0 To 14) As Single '---------------表的每列宽
Dim table_Col(0 To 27) As String '----------表头列变量
Dim table_Col1(0 To 27) As String '----------表头列变量
Dim iCol_centre As Single '------------------表头居中处理
Dim iCol_centre1 As Single '------------------表头居中处理
table_Col(0) = " 站 点 名 称 "
table_Col1(0) = ""
table_Col(1) = "日 期 时 间"
table_Col1(1) = ""
table_Col(2) = "电网电压"
table_Col1(2) = "(千伏)"
table_Col(3) = "电网电流"
table_Col1(3) = "(安)"
table_Col(4) = "目标功"
table_Col1(4) = "率因数"
table_Col(5) = "当前功"
table_Col1(5) = "率因数"
table_Col(6) = "有功功率"
table_Col1(6) = "(千瓦)"
table_Col(7) = "无功功率"
table_Col1(7) = "(千乏)"
table_Col(8) = "投切"
table_Col1(8) = "状态"
table_Col(9) = "投切延时时间"
table_Col1(9) = "(投/切)(秒)"
table_Col(10) = "当日投切次数"
table_Col1(10) = "(投/切)(次)"
table_Col(11) = "电压谐波"
table_Col1(11) = "(%)"
table_Col(12) = "电流谐波"
table_Col1(12) = "(%)"
table_Col(13) = "电压"
table_Col1(13) = "报警"
Dim j As Byte
'-----初始化列宽变量
For j = 0 To 13
iCol(j) = UNIT_CM * 1.5
DoEvents
Next j
iCol(0) = UNIT_CM * 5 '特殊列处理
iCol(1) = UNIT_CM * 3.5
'iCol(3) = UNIT_CM * 1.8
iCol(4) = UNIT_CM * 1.3
iCol(5) = UNIT_CM * 1.3
iCol(8) = UNIT_CM * 1
iCol(9) = UNIT_CM * 2.4
iCol(10) = UNIT_CM * 2.4
iCol(13) = UNIT_CM * 1
'-----统计总列宽
For j = 0 To 13
iCols = iCols + iCol(j)
DoEvents
Next j
'-----初始化行高变量
For j = 1 To hs
iRow(j) = UNIT_CM * 0.5
DoEvents
Next j
iRow(0) = UNIT_CM
'-----统计总行高
iRows = TABLE_TOP
For j = 0 To hs
iRows = iRows + iRow(j)
DoEvents
Next j'-----决定表的大小---------------
If obj Is Pic1 Then
obj.ScaleMode = 1
obj.Width = 14991
obj.ScaleWidth = 16361
obj.Height = 9260
obj.ScaleHeight = 11366
ElseIf obj Is Printer Then
obj.PaperSize = vbPRPSA4
obj.Orientation = 2 '横向打印End If'---========画表的列开始========----
Dim table_Centre As Single
table_Centre = (obj.ScaleWidth - iCols) / 2
iCols = table_Centre
For j = 0 To 14
obj.Line (iCols, TABLE_TOP)-(iCols, iRows), QBColor(0)
iCols = iCols + iCol(j)
DoEvents
Next j'---========画表的行开始========---
iRows = TABLE_TOP
For j = 0 To hs + 1
obj.Line (table_Centre, iRows)-(iCols, iRows), QBColor(0)
iRows = iRows + iRow(j)
DoEvents
Next j
'---========打印表头标题=======-----
obj.FontName = "宋体"
obj.FontSize = 12
obj.FontBold = 1
obj.CurrentX = (obj.ScaleWidth - obj.TextWidth(table_Header)) / 2
obj.CurrentY = (TABLE_TOP - obj.TextHeight(table_Header)) / 2
obj.Print table_Header
obj.FontSize = 9
obj.FontBold = 0
'--------- 打印表头列 ------------
iCols = table_Centre
Dim Char_Y As Long
Dim char1_Y As Long
For j = 0 To 13
Select Case j
Case 0, 1
Char_Y = TABLE_TOP + (iRow(0) - obj.TextHeight(table_Col(0))) / 2 + 15
char1_Y = TABLE_TOP + (iRow(0) - obj.TextHeight(table_Col(0))) / 2 + 15
Case Else
Char_Y = TABLE_TOP + (iRow(0) - 2.2 * obj.TextHeight(table_Col(0))) / 2 + 15
char1_Y = TABLE_TOP + (iRow(0) - obj.TextHeight(table_Col(0))) / 1.2 + 15
End Select
iCol_centre = (iCol(j) - obj.TextWidth(table_Col(j))) / 2 + 15
iCol_centre1 = (iCol(j) - obj.TextWidth(table_Col1(j))) / 2 + 15
obj.CurrentX = iCols + iCol_centre
obj.CurrentY = Char_Y
obj.Print table_Col(j) '/*---------------------------prn*/
obj.CurrentX = iCols + iCol_centre1
obj.CurrentY = char1_Y
obj.Print table_Col1(j) '/*---------------------------prn*/
iCols = iCols + iCol(j)
DoEvents
Next j
'--------- 决定表在屏幕上的位置 -----------
If obj Is Pic1 Then
If obj.Width < Frame1.Width Then
obj.Left = (Frame1.Width - obj.Width) / 2
Else
obj.Left = 0
End If
If obj.Height < Frame1.Height Then
obj.Top = (Frame1.Height - obj.Height) / 2
Else
obj.Top = 0
End If
End If WriteData obj, iCol(), 1.7 * iRow(1), table_CentreEnd Sub '*============================ 画报表结束 ============================*Private Sub WriteData(ByVal obj As Object, ByRef iCol() As Single, _
ByVal irow_Height As Integer, ByVal table_Centre)
'*----------------------------------------------------------*
'| 入口参数: |
'| obj 送来的对象 |
'| iCol() 送来的列宽 |
'| irow_Height 送来的行高 |
'| table_Centre 表的左右边界 |
'| 出口参数: |
'| 无 |
'*----------------------------------------------------------*'===================== 以下从数据库往表中写数据 ===========================
Dim i As Byte, j As Integer, iCol_centre As Single
Dim iCols As Single, Char_Y As Single
iCols = table_Centre
Char_Y = TABLE_TOP + irow_Height + _
(irow_Height - Pic1.TextHeight(rst(0))) / 2 + 15
For i = 1 To hs '写hs条记录到表内
For j = 0 To 13
iCol_centre = (iCol(j) - obj.TextWidth(rst(j))) / 2 + 15
obj.CurrentX = iCols + iCol_centre
obj.CurrentY = Char_Y
obj.Print rst(j) 'prn
iCols = iCols + iCol(j)
Next j
rst.MoveNext
If rst.EOF Then Exit For
DoEvents
iCols = table_Centre
Char_Y = Char_Y + UNIT_CM * 0.5
Next i
Dim page2 As String
page2 = "第" & str(Page1) & " 页"
obj.CurrentX = (obj.ScaleWidth - obj.TextWidth(page2)) / 2
obj.CurrentY = 10950
obj.Print page2
If obj Is Pic1 Then
Pic1.Visible = True
End IfEnd Sub
注意 Printer 属性值的效果依赖于打印机生产厂家提供的驱动程序。有些属性设置值没有作用,或几个不同的属性设置值可能有相同作用。在允许值范围之外的设置,可能产生错误,也可能不会产生错误。关于指定驱动程序的详细信息,请参阅生产厂家的文档资料。有时候唯一办法是:改变打印机驱动属性,首先项里去改吧,这是没办法的事.