printer不会物理的改变打印机的设置,只是在一个打印进程中起作用。

解决方案 »

  1.   

    欢迎你去www.myvc.net编程技术论坛  
    你可以在那里交流编程技术  
    注册用户请去以下帖子领分  
    http://www.csdn.net/expert/topic/682/682036.xml?temp=.5972101  
    http://www.csdn.net/expert/topic/681/681917.xml?temp=.5434992  
    http://www.csdn.net/expert/topic/676/676074.xml?temp=.9520075  
    http://www.csdn.net/expert/topic/641/641938.xml?temp=5.826968E-02
      

  2.   

    您直接用printer对象
    printer.orientation=2
    debug.print printer.width
      

  3.   

    Private PageDirection As Integer
    Private Const CCHDEVICENAME = 32
    Private Const CCHFORMNAME = 32
    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const PRINTER_ACCESS_ADMINISTER = &H4
    Private Const PRINTER_ACCESS_USE = &H8
    Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
    Private Const DM_MODIFY = 8
    Private Const DM_IN_BUFFER = DM_MODIFY
    Private Const DM_COPY = 2
    Private Const DM_OUT_BUFFER = DM_COPY
    Private Const DM_DUPLEX = &H1000&
    Public Const DMDUP_SIMPLEX = 1
    Private Const DMDUP_VERTICAL = 2
    Private Const DMDUP_HORIZONTAL = 3
    Private Const DM_ORIENTATION = &H1&
    Private Type DEVMODE
        dmDeviceName As String * CCHDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCHFORMNAME
        dmLogPixels As Integer
        dmBitsPerPel As Long
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
        dmICMMethod As Long
        dmICMIntent As Long
        dmMediaType As Long
        dmDitherType As Long
        dmReserved1 As Long
        dmReserved2 As Long
    End TypePrivate Type PRINTER_DEFAULTS
        pDatatype As String
        pDevMode As Long
        DesiredAccess As Long
    End Type
    Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
    Private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As Long
    Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    Private Declare Function DocumentProperties Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, ByVal pDevModeOutput As Any, ByVal pDevModeInput As Any, ByVal fMode As Long) As LongPublic Sub SetOrientation(NewSetting As Long, chng As Integer)
        Dim PrinterHandle As Long
        Dim PrinterName As String
        Dim pd As PRINTER_DEFAULTS
        Dim MyDevMode As DEVMODE
        Dim Result As Long
        Dim Needed As Long
        Dim pFullDevMode As Long
        Dim pi2_buffer() As Long    
        PrinterName = Printer.DeviceName
        If PrinterName = "" Then
            Exit Sub
        End If
        
        pd.pDatatype = vbNullString
        pd.pDevMode = 0&    pd.DesiredAccess = PRINTER_ALL_ACCESS
        
        Result = OpenPrinter(PrinterName, PrinterHandle, pd)
            Result = GetPrinter(PrinterHandle, 2, ByVal 0&, 0, Needed)
        ReDim pi2_buffer((Needed \ 4))
        Result = GetPrinter(PrinterHandle, 2, pi2_buffer(0), Needed, Needed)    pFullDevMode = pi2_buffer(7)
            Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))
            MyDevMode.dmDuplex = NewSetting
        MyDevMode.dmFields = DM_DUPLEX Or DM_ORIENTATION
        MyDevMode.dmOrientation = chng    Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))
        
        Result = DocumentProperties(Form1.hwnd, PrinterHandle, PrinterName, ByVal pFullDevMode, ByVal pFullDevMode, DM_IN_BUFFER Or DM_OUT_BUFFER)    Result = SetPrinter(PrinterHandle, 2, pi2_buffer(0), 0&)
        
        Call ClosePrinter(PrinterHandle)    Dim p As Printer
        For Each p In Printers
            If p.DeviceName = PrinterName Then
                Set Printer = p
                Exit For
            End If
        Next p
        Printer.Duplex = MyDevMode.dmDuplex
    End SubPublic Sub ChngOrientationLandscape()
    PageDirection = 2
    Call SetOrientation(DMDUP_SIMPLEX, PageDirection)
    End Sub
    Public Sub ReSetOrientation()If PageDirection = 1 Then
    PageDirection = 2
    Else
    PageDirection = 1
    End If
    Call SetOrientation(DMDUP_SIMPLEX, PageDirection)
    End Sub
    Public Sub ChngOrientationPortrait()
    PageDirection = 1
    Call SetOrientation(DMDUP_SIMPLEX, 1)
    End Sub
      

  4.   

    同意: xdd1125(成长快乐)大家的智慧->  No 1
      

  5.   

    watt(瓦特)你的例子我也有,是progame的,我就是因为
    他的第二版有这种功能而想移植到第一版,我以前写的
    用在listview上的打印竖排转横排也没有实现,因此我对
    此非常关注.