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
[-]
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;
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;
SetDefault;
end;
procedure TReportForm.Initialize;
var
bo : TBookMark;
begin
if Report.DataSet <> nil then
begin
Report.DataSet.DisableControls;
bo := Report.DataSet.GetBookMark;
end;
QRPreview.QRPrinter := nil;
Report.PrinterSettings.Orientation := Report.Page.Orientation;
Report.PrinterSettings.PaperSize := Report.Page.PaperSize;
Report.PrinterSettings.Title := Caption;
try Report.Prepare;
except ShowMessage('Papel not supported by printer');
end;
QRPreview.QRPrinter := Report.QRPrinter;
QRPreview.ZoomToFit;
while QRPreview.QRPrinter.status <> mpFinished do;
if QRPreview.QRPrinter.Status <> mpFinished then exit;
lbPag.Caption := Format('%d/%d',[QRPreview.PageNumber,QRPreview.QRPrinter.PageCount]);
pagnav.Visible := QRPreview.QRPrinter.PageCount > 1;
if Report.DataSet <> nil then
begin
try Report.DataSet.GotoBookMark(bo);
except Report.DataSet.First;
end;
Report.DataSet.FreeBookMark(bo);
Report.DataSet.EnableControls;
end;
end;
procedure TReportForm.FormResize(Sender: TObject);
begin
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
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
if QRPreview.QRPrinter.Status <> mpFinished then exit;
lbPag.Caption := Format('%d/%d',[QRPreview.PageNumber,QRPreview.QRPrinter.PageCount]);
end;
procedure TReportForm.lbPrintReact(Sender: TObject);
var
i : integer;
begin
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
savex := Mouse.CursorPos.x;
savey := Mouse.CursorPos.y;
end;
procedure TReportForm.QRPreviewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Source = QRPreview) or (Source = QRPreview.PreviewImage);
end;
procedure TReportForm.QRPreviewEndDrag(Sender, Target: TObject; X,
Y: Integer);
begin
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
QRPreview.Zoom := QRPreview.Zoom + (WheelDelta div (abs(WheelDelta)))
end;
procedure TReportForm.PreviewModal;
begin
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
tipusPreview := tpPreview;
Show;
end;
procedure TReportForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
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
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.