Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2010
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
QuickReport Aplicar cambios de Impresion

Hola, largo tiempo sin comentar por aqui . La razón es cambio de trabajo, horarios, hábitos, dejar de fumar jejeje...

bueno, al grano que me pierdo y creo este post será interminable:

Estamos en la vista preliminar de un QuickReport 4.05 con D7 y damos a PrinterSetup, cambiamos la bandeja de entrada y al pulsar el botón imprimir pasa 3 kilos de nosotros y lo hace por la que estaba configurada antes de los cambios.

Parece que la única forma es modificando los valores por defecto de la impresora (para todo windows) cosa que no podemos hacer en este caso.


Si sabes cómo solucionar esto, obvia el resto de mis divagaciones y por favor contesta cómo se procede para que QuickReport aplique los cambios realizados sea cual sea el modelo de la impresora.


Divagaciones a grandes rasgos:

Hasta donde he podido ver, toda impresora tiene dos partes, la pública con las propiedades típicas de toda impresora y otra zona privada donde tiene esas características propias que solo ella tiene, como posibilidad de elegir la bandeja de entrada y salida de documentos, impresión de sobres, etc.

Según he probado, una vez llamas a quickReport.PriterSetup y modificas algo, se lanza el evento OnApplySettings del QuickReport y allí obtenemos por parámetros una variable DevMode que contiene la declaración pública (y supongo que privada) de la Impresora, de hecho, los cambios ya están aplicados en ese DevMode, pero no sé qué hacer con él.
Una vez traducido a delphi este código (lo siento, no tengo a mano el código traducido):
http://support.microsoft.com/kb/167345

no funciona jejeje, es decir, no hay violaciones de acceso a memoria ni ninguna excepción, simplemente no atiende a los cambios.
Lo que he hecho es imprimir con PDFCreator y en la vista preliminar uso PrinterSetup para cambiar dos parámetros:
- orientación de página a apaisado
- impresión solo en blanco y negro

Obtengo un PDF en color con el folio en apaisado jejeje, según entiendo QuicReports está aplicando las propiedades de la zona pública (el apaisado) pero no así las privadas (impresión en blanco y negro). Debo decir que desde Microsoft Office, si uso el PDFCreator con las mismas opciones, obtengo el PDF en apaisado y en escala de grises, por ende, es cosa de mi programa y/o QuickReport.


A ver si alguien ha estudiado este tema y damos con la tecla...yo seguiré buscando.

Muchas gracias por vuestro tiempo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 19-12-2010
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
En este hilo se habló de algo parecido. Espero que te sirva

Un saludo
Responder Con Cita
  #3  
Antiguo 19-12-2010
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Gracias por tu pronta respuesta ElKurgan, aunque no es exactamente lo mismo.

Intuyo que usar quickReport.qrprinter.PrintSetup (o lo que es lo mismo: quickReport.PrinterSetup) era mejor que usar un PrintDialog, porque hasta donde entiendo el quickReport debería aplicar los cambios a la impresora, es más, creo que para eso tiene el evento OnApplySettings.

Ya he rascado bastante, pero de momento obtengo el "sigue buscando", jejeje.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 19-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En otros generadores de informes creo que basta con seleccionar la nueva impresora en la configuración del informe, supongo, seguro, que eso es algo que has hecho.


p.d. y se te saluda... espero que los cambios hayan sido para bien, al menos lo de dejar de fumar ya es un logro muy importante, si eres de los que fumaban un paquete diario a ¿3 euros el paquete? son 90 euros al mes, por 12 meses= 1080 euros al años. con eso te vas un mes de viaje cada año a casi cualquier lugar del mundo
Responder Con Cita
  #5  
Antiguo 19-12-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En el peor de los casos, puedes probar a duplicar la impresora, es decir instalar en el sistema la misma con otro nombre, darle a esta Nueva_Y_Duplicada, esas propiedades y luego símplemente elegirla a la hora de imprimir.

Me alegro que hayas dejado de fumar.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 20-12-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola Lepe de nuevo,
una vez me pelee tambien con este tema. Creo que lo solucione asignando QRPreview.Printer = printer.ItemIndex, QRReport.Printer := printer.ItemIndex, poniendo el papel manualmente tambien a las dos printers, y despues usar ApplySettings tambien en las dos printers. No recuerdo bien bien como iba, lo siento , pero fue un mareo usando estas tres cosas (el orden en que lo asignabas, por ejemplo, afectaba) Si encuentro el codigo fuente lo pongo (ahora uso freereports de fastreports). Al final con paciencia y probando lo consegui. Suerte!
Responder Con Cita
  #7  
Antiguo 20-12-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Lo encontre! te lo dejo tal cual. Era un form que hacia de preview con las opciones de canviar tamaño y esas cosas. Te lo dejo tal cual por si te sirve algo mas:

Código Delphi [-]

//
//   12/01/09 : repform. Custom preview del quickreport
//
//

unit repform;

interface

uses Windows, Dialogs, Menus, Controls, ExtCtrls, ComCtrls,
  StdCtrls, Classes, Forms, QRPrntr, QuickRpt, db, sysutils, UText,
  FPanel;

type TTipusPreview = (tpPreview,tpPreviewModal);

type THKQRPreview = class(TQRPreview);
type THKPreviewImage = class(TQRPreviewImage);

type TReportForm = class(TForm)
          ppMenu: TPopupMenu;
          saveto: TMenuItem;
          loadfrom: TMenuItem;
          printsetup: TMenuItem;
          print: TMenuItem;
          printtoXLS: TMenuItem;
          SaveDialog: TSaveDialog;
          OpenDialog: TOpenDialog;
          N1: TMenuItem;
          procedure Preview;
          procedure FormResize(Sender: TObject);
          procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
          procedure pagnavClick(Sender: TObject; Button: TUDBtnType);
          procedure QRPreviewPageAvailable(Sender: TObject; PageNum: Integer);
          procedure lbPrintReact(Sender: TObject);
          procedure Initialize;
          procedure SetDefault;
          procedure FormShow(Sender: TObject);
          procedure QRPreviewEndDrag(Sender, Target: TObject; X, Y: Integer);
          procedure QRPreviewStartDrag(Sender: TObject;var DragObject: TDragObject);
          procedure QRPreviewDragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
          procedure QRPreviewMouseWheel(Sender: TObject; Shift: TShiftState;
          WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
          procedure FormClose(Sender: TObject; var Action: TCloseAction);
          procedure lbCopiesReact(Sender: TObject);
          procedure lbPrintToPDFReact(Sender: TObject);
          procedure lbPageReact(Sender: TObject);
          procedure lbZoomToFitReact(Sender: TObject);
          procedure lbZoomToWidthReact(Sender: TObject);
     private
          copies : integer;
          savex,
          savey : integer;
          tipuspreview : TTipusPreview;
          procedure PreparaEstildePagina;
     public
          Report   : TQuickRep;
          constructor Create(AOwner : TComponent); override;
          procedure PreviewModal; overload;
          procedure PreviewModal(r : TQuickRep; d : TDataSet; c : string); overload;
end;

var ReportForm: TReportForm;

implementation

{$R *.DFM}

uses printers, global;

constructor TReportForm.Create(AOwner : TComponent);
begin
     inherited Create(AOwner);

     doublebuffered := true;
     QRPreview.Doublebuffered := true;

     // assignem procedures per moure
     THKPreviewImage(QRPreview.PreviewImage).SetDragMode(dmAutomatic);
     THKPreviewImage(QRPreview.PreviewImage).DragCursor  := crHandPoint;
     THKPreviewImage(QRPreview.PreviewImage).OnStartDrag := QRPreviewStartDrag;
     THKPreviewImage(QRPreview.PreviewImage).OnEndDrag   := QRPreviewEndDrag;
     THKPreviewImage(QRPreview.PreviewImage).OnDragOver  := QRPreviewDragOver;

     // assignem valors per defecte
     SetDefault;
end;

procedure TReportForm.Initialize;
var
     bo : TBookMark;
begin
     // desabilitem controls del dataset
     if Report.DataSet <> nil then
     begin
          Report.DataSet.DisableControls;

          // salvem posicio inicial
          bo := Report.DataSet.GetBookMark;
     end;

     // desassociem el qrpreview
     QRPreview.QRPrinter := nil;

     // s'ha de provar si funciona
     Report.PrinterSettings.Orientation := Report.Page.Orientation;
     Report.PrinterSettings.PaperSize := Report.Page.PaperSize;
     Report.PrinterSettings.Title := Caption;

     // preparem informe
     try       Report.Prepare;
     except    ShowMessage('Papel not supported by printer');
     end;

     // asignem qrpreview a l'impresió del report
     QRPreview.QRPrinter := Report.QRPrinter;
     QRPreview.ZoomToFit;

//     Report.PrinterSettings.ApplySettings(Report.QRPrinter);
//     Report.PrinterSettings.ApplySettings(QRPreview.QRPrinter);

     // s'espera fins que estigui el document preparat
     while QRPreview.QRPrinter.status <> mpFinished do;

     // com que el quickrep fa coses rares, deixem aquesta linea
     if QRPreview.QRPrinter.Status    <> mpFinished then exit;

     // posem numero actual i total de pagina
     lbPag.Caption := Format('%d/%d',[QRPreview.PageNumber,QRPreview.QRPrinter.PageCount]);

     // només visible si si hi han més d'una pagina
     pagnav.Visible := QRPreview.QRPrinter.PageCount > 1;

     // del dataset, tornem al registre inicial
     if Report.DataSet <> nil then
     begin
          try       Report.DataSet.GotoBookMark(bo);
          except    Report.DataSet.First;
          end;

          // alliberem bookmark
          Report.DataSet.FreeBookMark(bo);

          // activem de nou els controls
          Report.DataSet.EnableControls;
     end;
end;

procedure TReportForm.FormResize(Sender: TObject);
begin
     // zoom to fit
     QRPreview.ZoomToFit;
end;

procedure TReportForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     case Key of
     27 :  begin modalresult := mrCancel; close; end;
     end;
end;

procedure TReportForm.pagnavClick(Sender: TObject; Button: TUDBtnType);
begin
     // pasem d'una fulla a una altre
     if Button = btNext then QRPreview.PageNumber := QRPreview.PageNumber + 1
     else                    QRPreview.PageNumber := QRPreview.PageNumber - 1;

     QRPreviewPageAvailable(sender,0);
end;

procedure TReportForm.QRPreviewPageAvailable(Sender: TObject;
  PageNum: Integer);
begin
     // evitem l'excepció del pagecount
     if QRPreview.QRPrinter.Status <> mpFinished then exit;

     // posem nº de fulles
     lbPag.Caption := Format('%d/%d',[QRPreview.PageNumber,QRPreview.QRPrinter.PageCount]);
end;

procedure TReportForm.lbPrintReact(Sender: TObject);
var
     i : integer;
begin
//   Aquesta linea en teoria es necesaria, però sense ella va bé
//     Report.PrinterSettings.ApplySettings(Report.QRPrinter);

     for i := 0 to Copies -1 do
     Report.Print;
end;

procedure TReportForm.FormShow(Sender: TObject);
begin
     Width  := 650;
     Height := 400;

     Initialize;
end;

procedure TReportForm.QRPreviewStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
     // guardem posicio
     savex := Mouse.CursorPos.x;
     savey := Mouse.CursorPos.y;
end;

procedure TReportForm.QRPreviewDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
     // només si inici = QRPreview
     Accept := (Source = QRPreview) or (Source = QRPreview.PreviewImage);
end;

procedure TReportForm.QRPreviewEndDrag(Sender, Target: TObject; X,
  Y: Integer);
begin
     // movem
     QRPreview.PreviewImage.Left := QRPreview.PreviewImage.Left + (Mouse.cursorpos.x-savex);
     QRPreview.PreviewImage.Top  := QRPreview.PreviewImage.Top + (Mouse.CursorPos.y-savey);

     QRPreview.Enabled := true;
end;

procedure TReportForm.SetDefault;
begin
     lbcopies.Caption := 'Còpies (1)';
     Copies := 1;
end;

procedure TReportForm.QRPreviewMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
     // aquest codi no funciona si num_pagines = 1
     QRPreview.Zoom := QRPreview.Zoom + (WheelDelta div (abs(WheelDelta)))
end;

procedure TReportForm.PreviewModal;
begin
     // preview modal
     tipuspreview := tpPreviewModal;
     ShowModal;
end;

procedure TReportForm.PreviewModal(r : TQuickRep; d : TDataSet; c : string);
begin
     report := r;
     report.DataSet := d;
     Caption := c;

     case Report.Page.PaperSize of
     A4 : lbPage.ItemIndex := 0;
     A5 : lbPage.ItemIndex := 1;
     end;

     PreviewModal;
end;

procedure TReportForm.Preview;
begin
     // preview
     tipusPreview := tpPreview;
     Show;
end;

procedure TReportForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     // preview s'ha de crear a runtime
     if tipuspreview = tpPreview
     then release;
end;

procedure TReportForm.lbCopiesReact(Sender: TObject);
begin
     Copies := IntegerIn('Còpies',inttostr(copies));
     (sender as TUText).Caption := 'Còpies ('+inttostr(copies) +')';
end;

procedure TReportForm.lbPrintToPDFReact(Sender: TObject);
var
     ant,
     idx : integer;
begin
     // impresió a pdf: escollim Cute PDF com a predeterminada, imprimim, restaurem
     ant := Report.PrinterSettings.PrinterIndex;
     idx := Printer.Printers.IndexOf('CutePDF Writer');
     if idx < 0 then
     MessageDLG('Es necesita tenir instal·lat Cute PDF Writer per a imprimir a .PDF. Es pot trobar a http://www.cutepdf.com',mtError,[mbOk],0)
     else
     begin
          Report.PrinterSettings.PrinterIndex := idx;
          lbPrint.React;
     end;
     Report.PrinterSettings.PrinterIndex := ant;
end;

procedure TReportForm.PreparaEstildePagina;
begin
     case lbPage.ItemIndex of
     0 :  begin
               Report.Page.PaperSize   := A4;
               Report.Page.Orientation := poPortrait;
               Report.PrinterSettings.PaperSize := A4;
               Report.PrinterSettings.Orientation := poPortrait;
          end;
     1 :  begin
               Report.Page.PaperSize   := A5;
               Report.Page.Orientation := poLandscape;
               Report.PrinterSettings.PaperSize := A5;
               Report.PrinterSettings.Orientation := poLandscape;
          end;
     end;

     try    Report.Prepare;
     except ShowMessage('L''impresora no reconeix aquest tipus de paper.');
     end;

     QRPreview.QRPrinter := Report.QRPrinter;
     Report.PrinterSettings.ApplySettings(Report.QRPrinter);
     Report.PrinterSettings.ApplySettings(QRPreview.QRPrinter);
     QRPreview.ZoomToFit;

     pagnav.Visible := QRPreview.QRPrinter.PageCount > 1;
end;

procedure TReportForm.lbPageReact(Sender: TObject);
begin
     PreparaEstildePagina;
end;

procedure TReportForm.lbZoomToFitReact(Sender: TObject);
begin
     QRPreview.ZoomToFit;
end;

procedure TReportForm.lbZoomToWidthReact(Sender: TObject);
begin
     QRPreview.ZoomToWidth;
end;

end.

un saludo y a ver si te sirve.
Responder Con Cita
  #8  
Antiguo 21-12-2010
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Muchas gracias coso, la verdad me tenía mareado varios días antes de preguntar en el foro, ya había buscado en las msdn, foros qusoft, google, además de haber hecho multitud de pruebas.

Me pongo a probarlo ya mismo .

Un saludo a todos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¡¡¡Ayuda con Impresion en QuickReport!!! onlytk Impresión 8 16-08-2018 21:27:09
Aplicar cambios hechos en Opciones de Carpeta aeff API de Windows 3 16-10-2007 04:42:46
Impresion con QuickReport 4 neftafly Impresión 9 14-07-2005 17:57:45
Impresion con QuickReport rgc Impresión 8 13-07-2005 12:24:14
Cerrar tabla sin aplicar cambios Barriccel Conexión con bases de datos 4 27-01-2004 18:47:51


La franja horaria es GMT +2. Ahora son las 13:52:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi