Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Vistas preliminares a la medida (https://www.clubdelphi.com/foros/showthread.php?t=80732)

dec 01-07-2006 03:05:14

Vistas preliminares a la medida
 
Ya he perdido la cuenta de las veces que me han preguntado cómo se programa una ventana de vista preliminar para QuickReport. No voy a mostrar las últimas técnicas disponibles, que pasan por definir una clase de ventana de vista preliminar por omisión (falta de documentación, como siempre), pero la técnica que mostraré vale para todas las versiones de QuickReport.

Primero desarrollaremos la ventana de vista preliminar. Creamos un nuevo formulario, al cual llamaremos wndPrev. En su interior dejamos caer un ToolBar y un componente QRPreview, de la página QReport de la Paleta de Componentes. A este último control le cambiamos su propiedad Align a alClient. Ahora interceptamos el método OnClose del formulario, para garantizar la devolución de recursos:

Código Delphi [-]
procedure TwndPrev.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
   QRPreview1.QRPrinter := nil;
end;

En la barra de herramientas añadimos cuatro botones para navegar por las páginas.

Estos son los métodos que ejecutarán:

Código Delphi [-]
procedure TwndPrev.bnPrimero(Sender: TObject);
begin
   QRPreview1.PageNumber := 1;
end;

procedure TwndPrev.bnAnterior(Sender: TObject);
begin
   QRPreview1.PageNumber := QRPreview1.PageNumber - 1;
end;

procedure TwndPrev.bnSiguiente(Sender: TObject);
begin
   QRPreview1.PageNumber := QRPreview1.PageNumber + 1;
end;

procedure TwndPrev.bnUltimo(Sender: TObject);
begin
   QRPreview1.PageNumber := QRPreview1.QRPrinter.PageCount;
end;

Traemos dos botones más, para el factor de escala de la muestra:

Código Delphi [-]
procedure TwndPrev.bnZoomIn(Sender: TObject);
begin
   QRPreview1.Zoom := QRPreview1.Zoom + 20;
end;

procedure TwndPrev.bnZoomOut(Sender: TObject);
begin
   QRPreview1.Zoom := QRPreview1.Zoom - 20;
end;

Existen también métodos para los valores especiales de acercamiento: ZoomToFit y ZoomToWidth. Para terminar con la ventana, traemos un botón de impresión:

Código Delphi [-]
procedure TwndPrev.bnPrint(Sender: TObject);
begin
   QRPreview1.QRPrinter.Print;
end;

En el informe para el cual queremos esta vista preliminar debemos interceptar el evento OnPreview:

Código Delphi [-]
procedure TrptCustomer.QuickRep1Preview(Sender: TObject);
begin
   with TwndPrev.Create(nil) do
   begin
      QRPreview1.QRPrinter := Sender as TQRPrinter;
      ShowModal;
      // El formulario se destruye automáticamente
   end,
end;

Para tener acceso al tipo TQRPrinter necesitamos añadir la unidad QRPrntr a la cláusula uses de la unidad del informe. Estoy mostrando la vista preliminar en forma modal, pero también podía haber utilizado una ventana no modal o incluso MDI.

Finalmente, hay que tener cuidado con la forma en que se ejecuta el informe:

Código Delphi [-]
procedure TwndMain.Button1Click(Sender: TObject);
begin
   rptCustomer.QuickRep1.PreviewModal;
end;

En La Cara Oculta de Delphi 4, el ejemplo de vista preliminar del CD-ROM llamaba directamente al método Preview. Pero a partir de la versión 3.0.3 de QuickReport, que apareció mucho después de salir Delphi 4 al mercado, este método dejó de funcionar con formularios de previsualización a la medida

BlueSteel 05-07-2006 22:16:28

Hola.. estube realizando esto y me parece muy interesante... pero quede atrapado en este código...


Donde se declara esto...???

Código:

procedure TwndMain.Button1Click(Sender: TObject);
begin
  rptCustomer.QuickRep1.PreviewModal;
end;

Salvo ese código se funciono el formulario.. lo único es que no se mostra la vista previa.. puede ser por ese codigo.. y cuando pinche el boton de imprimir solo me imprimio la primera parte..


La franja horaria es GMT +2. Ahora son las 10:21:55.

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