Page 1 of 1

Cambiar resolución en vista previa?

Posted: Sun Jul 20, 2025 1:02 am
by Armando
Amigos del foro:

Estando en la vista previa de un reporte creado con la impresora por default, al cambiar
de impresora tomada de la lista de impresoras en la vista previa, ¿es posible cambiar
la vista previa para ajustarla a la resolución de la impresora elegida?, en mis caso no
sucede.

Espero haberme explicado bien.

Saludos

Re: Cambiar resolución en vista previa?

Posted: Sun Jul 20, 2025 12:09 pm
by Antonio Linares
Estimdo Armando,

la vista previa no se re-ajusta en tiempo de ejecución al cambiar de impresora dentro de la misma ventana; necesitas cerrarla y volver a abrirla después de haber establecido la impresora correcta y limpiado los datos del reporte.

En Visual FoxPro, la vista previa que se muestra al abrir un reporte no se ajusta automáticamente a la resolución o características de la impresora que luego selecciones en la barra de herramientas de “Vista previa”.

El motor genera la pre-visualización con la configuración de la impresora que estaba activa en el momento en que se ejecutó el … PREVIEW. Si, estando ya en la ventana de vista previa, eliges otra impresora en la lista desplegable, el reporte sigue dibujado con los parámetros de la impresora original (tamaño de papel, orientación, resolución, márgenes, etc.), por eso el aspecto ya no coincide exactamente con lo que luego enviarías a la nueva impresora.

Re: Cambiar resolución en vista previa?

Posted: Sun Jul 20, 2025 4:37 pm
by Armando
Maestro:

Efectivamente, así es como funciona, y, ¿no es posible tener esa mejora en el TO DO?, me parece
que WORD así lo hace, por eso creo que la mejora es posible, pero ustedes son los expertos.

Un abrazo

Re: Cambiar resolución en vista previa?

Posted: Mon Jul 21, 2025 7:56 am
by Antonio Linares
Estimado Armando,

Modifica este método en source\classes\rpreview.prg. Aqui parece funcionar bien. Aguardo tus resultados:

Code: Select all | Expand

METHOD SelPrinter( cPrinter ) CLASS TPreview

   local cOldPrinter := GetProfString( "windows", "device" , "" )  
  
   WriteProfString( "windows", "device", cPrinter )  
   SysRefresh()  
   PrinterInit()  
  
   DeleteDC( ::oDevice:hDC )  
  
   ::oDevice:hDC    = GetPrintDefault( GetActiveWindow() )  
   ::oDevice:cModel = cPrinter  
  
   // Add this: Rebuild the printer device  
   ::oDevice:Rebuild()  
     
   // Add this: Regenerate the preview content  
   if ::oReport != nil .and. ::oReport:bInit != nil  
      // If there's a report with initialization block, regenerate it  
      ::oDevice:aMeta := {}  // Clear existing metafiles  
      Eval( ::oReport:bInit, ::oReport )  
   endif  
     
   // Refresh the preview display  
   ::GoPage( 1 )  // Go to first page and refresh display  
  
   SysRefresh()  
   WriteProfString( "windows", "device", cOldPrinter )  
   
RETURN nil