PDA

Ver la Versión Completa : Configurando tamaño de papel en QR.


mlara
21-02-2004, 15:50:51
Hola foro.

Mis reportes diseñados en QR tienen tamaño de papel por defecto (QReport.Page.PageSize := 'Default'). Esto quiere decir que: Si el usuario configura tamaño oficio, pues el reporte se imprime en oficio. Si el usuario selecciona carta, el reporte se imprime en carta.

Problema:

Previsualizo el reporte en carta o en oficio. Presiono el botón 'Printer Setup'. Cambio el tamaño de hoja de la impresora actual. Doy click en Aceptar y no pasa nada. Es como si el tamaño no se hubiese cambiado.

Intenté hacer lo siguiente:

1. Usar un componente TPrinterSetupDialog para configurar el tamaño del papel antes crear el reporte.


if PrinterSetupDialog.Execute then
// Crea reporte y lo previsualiza


2. Usar un componente TPrinterSetupDialog para configurar el tamaño del papel después de crear el reporte y antes de previsualizarlo.


// Primero crea reporte
if PrinterSetupDialog.Execute then
// Previsualiza reporte


3. Ejecutar el método PrinterSetup del QuickReport antes de previsualizar el reporte.


QuickRep1.Tag := 0;
QuickRep1.PrinterSetup;
if QuickRep1.Tag = 0 Then
QuickRep1.Preview;


También...


QuickRep1.Tag := 0;
QuickRep1.PrinterSetup;
if QuickRep1.Tag = 0 Then begin
QuickRep1.ResetPageFooterSize;
QuickRep1.Preview;
end;


No funciona nada. La única forma de cambiar el tamaño del papel es configurándola en el sistema (por el menú Inicio).

Se supone que si yo cambio el tamaño del papel cuando tengo la previsualización en pantalla (con el botón 'Printer Setup') debo reconstruir el reporte? Si es así cómo lo hago? No olvidar que lo que se necesita es cambiar el tamaño del papel sin necesidad de ir por el menú Inicio.

Gracias.

Ivan JR
31-05-2004, 23:05:53
Pues en mi caso casí nunca cambiamos los tamaños de los reportes.. pues siempre se tienen un tamaña especifico para cada reporte.. pero tal vez te sirva esta pequeña rutina donde se configuran ciertas propiedades la impresora default, podrías poner una pantalla antes de llamar tu reporte donde selecciones el tamaño de papel o variarlo en base a alguna variable que indique a que tipo de papel va ese reporte.

With Printer do
Begin
Printer.GetPrinter(ADevice,ADriver,APort,DeviceHandle);

if DeviceHandle <> 0 Then
Begin
DevMode := GlobalLock(DeviceHandle);
//GlobalUnlock(DeviceHandle);
end;
with DevMode^ do
begin
dmFields := dmFields or DM_PAPERWIDTH;
//dmPaperSize := DMPAPER_LETTER;
//dmPaperWidth := 1500;
dmPaperWidth := 1500;
dmPaperLength := 1500;
dmPaperSize := DMPAPER_USER;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;

end;
GlobalUnlock(DeviceHandle);
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);

end;

mlara
01-06-2004, 08:03:14
Je je... después de tanto tiempo una respuesta aún te ayuda a resolver tus problemas.

Voy a probar el código a ver qué tal... gracias.