RE: Asignar Tamaño de pagina en windows 2000
Publicado por Aivan (2 intervenciones) el 19/01/2005 10:25:23
Muchas Gracias Benjo!
He probado tu código y aunque en prinicipio me daba algun problema que otro al final ha acabado funcionando cambiando algunas cosas, las pongo a continuación:
las declaraciones de APIS son las siguientes:
Private Declare Function DocumentProperties Lib \"winspool.drv\" Alias \"DocumentPropertiesA\" (ByVal hWnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, ByVal fMode As Long) As Long
Private Declare Function ResetDC Lib \"gdi32\" Alias \"ResetDCA\" (ByVal hdc As Long, lpInitData As DEVMODE) As Long
Private Declare Sub CopyMemory Lib \"KERNEL32\" Alias \"RtlMoveMemory\" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Y el código que me pasaste quedó de la siguiente forma:
Dim nsize As Long
Dim printerhandle As Long
Dim dmIn As DEVMODE, dmOut As DEVMODE
Dim dmInbuf() As Byte, dmOutbuf() As Byte
OpenPrinter Printer.DeviceName, printerhandle, 0&
\'La función DocumentProperties retorna la longitud del búfer necesario, si se asigna 0 al parámetro fMode. Esta Longitud se utiliza para dimensionar las dos matrices de byte.
nsize = DocumentProperties(Me.hWnd, printerhandle, Printer.DeviceName, 0&, 0&, 0&)
ReDim dmInbuf(nsize): ReDim dmOutbuf(nsize)
nsize = DocumentProperties(MyhWnd, printerhandle, Printer.DeviceName, dmOutbuf(0), dmInbuf(0), DM_OUT_BUFFER Or DM_IN_PROMPT)
Call CopyMemory(dmOut, dmOutbuf(0), Len(dmOut))
nsize = ResetDC(Printer.hdc, dmOut)
He probado tu código y aunque en prinicipio me daba algun problema que otro al final ha acabado funcionando cambiando algunas cosas, las pongo a continuación:
las declaraciones de APIS son las siguientes:
Private Declare Function DocumentProperties Lib \"winspool.drv\" Alias \"DocumentPropertiesA\" (ByVal hWnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, ByVal fMode As Long) As Long
Private Declare Function ResetDC Lib \"gdi32\" Alias \"ResetDCA\" (ByVal hdc As Long, lpInitData As DEVMODE) As Long
Private Declare Sub CopyMemory Lib \"KERNEL32\" Alias \"RtlMoveMemory\" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Y el código que me pasaste quedó de la siguiente forma:
Dim nsize As Long
Dim printerhandle As Long
Dim dmIn As DEVMODE, dmOut As DEVMODE
Dim dmInbuf() As Byte, dmOutbuf() As Byte
OpenPrinter Printer.DeviceName, printerhandle, 0&
\'La función DocumentProperties retorna la longitud del búfer necesario, si se asigna 0 al parámetro fMode. Esta Longitud se utiliza para dimensionar las dos matrices de byte.
nsize = DocumentProperties(Me.hWnd, printerhandle, Printer.DeviceName, 0&, 0&, 0&)
ReDim dmInbuf(nsize): ReDim dmOutbuf(nsize)
nsize = DocumentProperties(MyhWnd, printerhandle, Printer.DeviceName, dmOutbuf(0), dmInbuf(0), DM_OUT_BUFFER Or DM_IN_PROMPT)
Call CopyMemory(dmOut, dmOutbuf(0), Len(dmOut))
nsize = ResetDC(Printer.hdc, dmOut)
Valora esta pregunta


0