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
上面的代码现在怎么打印都是竖着的救命呀大侠们

解决方案 »

  1.   

    MSDN:
    Printer 对象的此属性的效果依赖于打印机厂商提供的驱动程序。某些属性设置值可能不起作用,或者一些不同的属性设置值可能有相同的效果。可接受范围之外的设置值可能产生也可能不产生错误。详细信息,请参阅厂家的具体驱动程序的文档
      

  2.   

    有的时候能打出横的,有的时候不能。不全是竖着的。。(同一台打印机)
    大部分的驱动程序应该是一样的设置吧。设置成cdlLandScape,大部分的应该好用吧。。
    如果不行的话,有没有VB自带的其他的打印的对象可用?(第三方的不可以)
      

  3.   

    代码没有问题(如果lz就用这段,lz的真实代码或也许有出入,也可能引起问题)电脑、打印机重启看看,是不是状态不稳造成的
      

  4.   

    建议你试一下PDF的虚拟打印机,我经常用它调试打印,很不错!效果好,还不费马达不费油:)
      

  5.   

    1.打印过程,什么都不可见(就是一点【打印】这个界面上的按钮,打印机直接出东西,中间没有任何提示)
    2.我先画出个横板的表格图片,然后就打印这个表格图片,图片内容如下:
    3.客户机不安装OFFICE,并且要求表头,和页码,所以要画成图片必须横板打印,打印过程不能给任何人添加麻烦,所以只能在打印程序内设置成横板的。请问有什么很好的办法么?
      

  6.   

    设置时有没有出错?
        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
      

  7.   

    3.客户机不安装OFFICE,并且要求表头,和页码,所以要画成图片这个概念是错误的,客户机这安装office,并且有表头,和页码,并不需要生成图片.
    line()可以画图片框,也可以画打印机格式如下:picture1.line(......)'在图片框上画线
    printer.line(....)'在打印机上画线
    所以你根本没必要去生成图片再打印.
      

  8.   

    3.客户机不安装OFFICE,并且要求表头,和页码,所以要画成图片 这个概念是错误的,客户机不安装office,并且有表头,和页码,并不需要生成图片. 
    line()可以画图片框,也可以画打印机格式如下: picture1.line(......)'在图片框上画线 
    printer.line(....)'在打印机上画线 
    所以你根本没必要去生成图片再打印. 
      

  9.   

    给你一段我以前写程序,你参考一下:
    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
      

  10.   

    没有出错~~on error goto 也有,并且内容基本和你一样但是没有错误,打印机也出了, 死活就是竖的
      

  11.   

    你的是什么 打印机??给你看看MSDN说明的printer对象:
    注意 Printer 属性值的效果依赖于打印机生产厂家提供的驱动程序。有些属性设置值没有作用,或几个不同的属性设置值可能有相同作用。在允许值范围之外的设置,可能产生错误,也可能不会产生错误。关于指定驱动程序的详细信息,请参阅生产厂家的文档资料。有时候唯一办法是:改变打印机驱动属性,首先项里去改吧,这是没办法的事.