Visual Basic - Asignar Tamaño de pagina en windows 2000

Life is soft - evento anual de software empresarial
 
Vista:

Asignar Tamaño de pagina en windows 2000

Publicado por Aivan (6 intervenciones) el 13/01/2005 12:19:06
Hola a todos,

Trabajo bajo Windows 2000 y estoy realizando un formulario para imprimir documentos el cual usa APIS para obtener las impresoras del sistema así como los tamaños de papel que tienen asignadas cada una de estas. Hasta aquí todo correcto , el problema es que no logro establecer en la impresora seleccionada un tamaño de papel también seleccionado por el usuario (por ejemplo el A3), haga lo que haga siempre establece el tamaño de papel como A4.

El código que he empleado esta basado en un articulo de Microsoft que teóricamente permite realizar esto por APIS (http://support.microsoft.com/kb/282474).
La función que teóricamente permite seleccionar el tamaño de papel aparece en este artículo nombrada como \'SelectForm\' , sin embargo en mi caso no produce ningún efecto. ¿Alguien tiene idea de que es lo que puede fallar? Gracias por todo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE: Asignar Tamaño de pagina en windows 2000

Publicado por Benjo (679 intervenciones) el 13/01/2005 13:52:05
'Según información de Desaware la declaración debería ser así
Public Declare Function DocumentProperties Lib "winspool.drv" _
Alias "DocumentPropertiesA" (ByVal hwnd As Long, _
ByVal hPrinter As Long, ByVal pDeviceName As String, _
pDevModeOutput As Long, pDevModeInput As Long, ByVal fMode As Long) _
As Long

'Y el procedimiento de DocumentProperties estaría errado.
'Faltan los apuntadores a bufer de memoria pdevModeInput y pdevModeOutput
Algunos controladores de impresoras, no utilizan datos privados en la estructura DEVMODE y funcionan correctamente, pero aquellas que necesiten datos privados no funcionarán, o lo que es peor, intentarán acceder a porciones de memoria fuera de la estructura. En algunos casos no ocasiona nada, pero la funciñon no sirve, y en otros provoca excepciones de memoria.

Dim dmIn As DEVMODE, dmOut As DEVMODE
Dim dmInbuf() As Byte, dmOutbuf() As Byte
'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(MyhWnd, PrinterHandle, PrinterName, VarPtr(dmOut), VarPtr(dmIn), 0)
ReDim dmInbuf(nSize): ReDim dmOutbuf(nSize)
nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, VarPtr(dmOutbuf(0)), VarPtr(dmInbuf(0)), DM_OUT_BUFFER Or DM_IN_PROMPT)
Call CopyMemory(dmOut, dmOutbuf(0), Len(dmOut))
'dmOut sería lo que en tu aplicación pDevMode
'Así debería funcionar correctamente.
'Probalo y me decis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar