Page 1 of 1

seleccionar impresora en preview

Posted: Wed Aug 29, 2007 2:46 pm
by edu_parada
Hola:

Me gustaría poder hacer que en el RPreview se pueda seleccionar la impresora, es decir, al pulsar el botón imprimir que se seleccione la impresora pero estoy algo perdido, sobre todo con los metafiles. Cualquier ayuda será bienvenida.

Mil gracias!!!!!!!!!

Posted: Wed Aug 29, 2007 3:15 pm
by jrestojeda
Hola:

Prueba utilizando la siguiente función entes de imprimir.

GetPrintDc()

Saludos, Esteban

Posted: Wed Aug 29, 2007 5:58 pm
by R.F.
No se puede, asi de claro.

¿ Porque ?

Pues porque el proceso de generacion de los Metafiles o de los EMFs utiliza el driver de la impresora que tenga seleccionada windows al momento de generar el reporte, y las imagenes generadas solo valen para dicha impresora.

Para eso existe la clausula FROM USER, tanto de PRINTER como de REPORT que te permite seleccionar una impresora ANTES de comenzar el proceso de impresion.

El motor de reportes de FW luego toma la informacion del driver de la impresora seleccionada, resolucion, tamaño del papel, margenes, fuentes soportadas, ETC y con esa informacion crea un objeto PRINTER y genera los metafiles, todo de acuerdo a la impresora seleccionada

Una vez terminado el proceso de impresion, entonces aparece el motor de vista previa, que lo unico que hace es mostrar en pantalla los distintos metafiles generados con la infomraicon de la impresora, de ahí solo te queda cerrar el motor de impresion o enviar a la impresora el reporte generado.

Por eso no es posible cambiar la impresora desde el motor de vista previa, porque los metafiles han sido generados de acuerdo a la impresora sobre la cual se van a imprimir, si tu cambias de impresora al momento de la impresion, entonces lo mas seguro es que el reporte no se visualice de la misma manera en que se ve en el motor de vista previa.

Para hacer lo que tu quieres, tendrias que generar los metafiles en un CONTEXTO DE DISPOSITVO INDEPENDIENTE, pero eso creo que no esta soportado por FiveWin actualmente, ya que cada contexto de dispositivo tiene que estar forzosamente ligado a un contenedor.

La otra opcion que te queda, es que despues del motor de vista previa, selecciones OTRA impresora y vuelvas a generar el reporte, pero ahora enviandolo directamente a la impresora sin pasar por la vista previa, es una solucion chapu, pero funcionaria.

Posted: Wed Aug 29, 2007 7:07 pm
by edu_parada
Hola René,

Muchas gracias por tu clarificadora respuesta. Lo de poner la cláusula FROM USER antes no es viable, porque es un engorro para el usuario tener siempre que seleccionar la impresora, cuando, generalmente, lo quiere ver por pantalla y, en su caso, luego imprimirlo.

He encontrado esto:

//------------------------------------------------------------------------
// función para cambiar la impresora desde previo (mcn)
//------------------------------------------------------------------------
func f_CamImpre (oDevice, cCbx )
local cPrinter

cPrinter := GetProfString( "windows", "device" , "" )
WriteProfString( "windows", "device", cCbx )
SysRefresh()
PrinterInit()
DeleteDC( oDevice:hDC ) // Sugestion by Enrico M. Giordano
oDevice:hDC := GetPrintDefault( GetActiveWindow() )
oWnd:End() // To close current preview
// Insert here the function to create the report
SysRefresh()
WriteProfString( "windows", "device", cPrinter )

RETURN nil

Se usa en rpreview pero cuando cambio de impresora da un GPF. ¿Sabes por qué?. Muchas gracias.

Un saludo