⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 previewform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 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 + -