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:
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:
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:
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:
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:
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:
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.
|