📄 previewform.pas
字号:
unit PreviewForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, ExtCtrls, StdCtrls, Spin, ComCtrls, Printers, qrprntr, quickrpt;
type
TfrmPreview = class(TForm)
QRPreview1: TQRPreview;
panelPreview: TPanel;
btnPrint: TSpeedButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
btnFirst: TSpeedButton;
btnLast: TSpeedButton;
btnPrev: TSpeedButton;
btnNext: TSpeedButton;
panelPageNumber: TPanel;
PrintDialog1: TPrintDialog;
QuickReport: TQuickRep;
procedure FormShow(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure btnFirstClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnPrevClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure ShowPageNumber;
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPreview: TfrmPreview;
implementation
{$R *.DFM}
procedure TfrmPreview.ShowPageNumber;
begin
panelPageNumber.caption := 'Page ' + IntToStr(QRPreview1.PageNumber) + ' of ' + IntToStr(QRPreview1.QRPrinter.PageCount);
end;
procedure TfrmPreview.FormShow(Sender: TObject);
begin
SpinEdit1.Value := 100;
//QRPreview1.zoom := 100; //Doesn't work in Delphi 3 in FormShow event.
QRPreview1.PageNumber := 1;
//ShowPageNumber; //Doesn't work in Delphi 3 (QRPreview1.QRPrinter.PageCount not calculated yet).
if WindowState = wsMinimized then WindowState := wsNormal; //If form was previously closed in minimized state, reset.
end;
procedure TfrmPreview.btnPrintClick(Sender: TObject);
var
x: integer;
begin
//QRPreview1.QRPrinter.PrintSetup; //Delphi 3 suggested method... doesn't work?
PrintDialog1.options := [poPageNums];
PrintDialog1.PrintRange := prAllPages; //Default: print all pages.
PrintDialog1.FromPage := 1;
PrintDialog1.MinPage := 1;
PrintDialog1.ToPage := QRPreview1.QRPrinter.PageCount;
PrintDialog1.MaxPage := QRPreview1.QRPrinter.PageCount;
PrintDialog1.Copies := 1;
if QRPrinter.PageCount >1 then PrintDialog1.Collate := true
else PrintDialog1.Collate := false;
if PrintDialog1.execute then begin
//QRPreview1.QRPrinter.PrinterIndex := Printer.PrinterIndex; //Doesn't work: the settings aren't updated. Maybe this will be fixed in a future release of QuickReports.
//QRPreview1.QRPrinter.FirstPage := PrintDialog1.FromPage;
//QRPreview1.QRPrinter.LastPage := PrintDialog1.ToPage;
//rptGLAccounts.QuickReport.PrinterSettings.PrinterIndex := Printer.PrinterIndex; //This works, but requires all reports to be added to uses clause, etc.
//rptGLAccounts.QuickReport.PrinterSettings.FirstPage := PrintDialog1.FromPage;
//rptGLAccounts.QuickReport.PrinterSettings.LastPage := PrintDialog1.ToPage;
//rptGLAccounts.QuickReport.PrinterSettings.ApplySettings(QRPrinter);
QuickReport.PrinterSettings.PrinterIndex := Printer.PrinterIndex; //This works
QuickReport.PrinterSettings.FirstPage := PrintDialog1.FromPage;
QuickReport.PrinterSettings.LastPage := PrintDialog1.ToPage;
QuickReport.PrinterSettings.ApplySettings(QRPrinter);
if (PrintDialog1.Collate = true) and (PrintDialog1.Copies > 1) then begin //collate multiple copies.
QRPreview1.QRPrinter.Copies := 1;
for x := 1 to PrintDialog1.Copies do begin QRPreview1.QRPrinter.Print; repaint; end;
end else if PrintDialog1.Copies > QRPreview1.QRPrinter.Copies then begin //Printer doesn't support multiple copies.
for x := 1 to PrintDialog1.Copies do begin QRPreview1.QRPrinter.Print; repaint; end;
end else QRPreview1.QRPrinter.Print;
end;
end;
procedure TfrmPreview.SpinEdit1Change(Sender: TObject);
begin
QRPreview1.Zoom := SpinEdit1.Value;
end;
procedure TfrmPreview.btnFirstClick(Sender: TObject);
begin
QRPreview1.PageNumber := 1;
ShowPageNumber;
end;
procedure TfrmPreview.btnLastClick(Sender: TObject);
begin
QRPreview1.PageNumber := QRPreview1.QRPrinter.PageCount;
ShowPageNumber;
end;
procedure TfrmPreview.btnPrevClick(Sender: TObject);
begin
if QRPreview1.PageNumber > 1 then begin
QRPreview1.PageNumber := QRPreview1.PageNumber - 1;
ShowPageNumber;
end;
end;
procedure TfrmPreview.btnNextClick(Sender: TObject);
begin
if QRPreview1.PageNumber < QRPreview1.QRPrinter.PageCount then begin
QRPreview1.PageNumber := QRPreview1.PageNumber + 1;
ShowPageNumber;
end;
end;
procedure TfrmPreview.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
ShowPageNumber;
if PageNum = 1 then QRPreview1.zoom := SpinEdit1.Value;
end;
procedure TfrmPreview.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -