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

📄 qrprev.~pas

📁 delphi7报表打印控件源码 可以设计报表
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
{ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :: QuickReport 4.0 for Delphi and C++Builder               ::
  ::                                                         ::
  :: QRPREV.PAS - QUICKREPORT STANDARD PREVIEW FORM          ::
  ::                                                         ::
  :: Copyright (c) 2003 A Lochert / QBS Software             ::
  :: All Rights Reserved                                     ::
  ::                                                         ::
  :: http://www.qusoft.com                                   ::
  :: 5/12/2003  new preview for 4                            ::
  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }

{$I QRDEFS.INC}

unit QRPrev;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, QRPrntr, QR4const, QRExtra, ComCtrls, ToolWin,
  Menus, ImgList, Grids, printers, jpeg, QRExport, QRWebFilt, QRPDFFilt;

type
  TQRStandardPreview = class(TForm)
    StatusBar: TStatusBar;
    ToolBar1: TToolBar;
    ZoomFit: TToolButton;
    Zoom100: TToolButton;
    ZoomToWidth: TToolButton;
    FirstPage: TToolButton;
    PreviousPage: TToolButton;
    ToolButton2: TToolButton;
    LastPage: TToolButton;
    PrintSetup: TToolButton;
    Print: TToolButton;
    SaveReport: TToolButton;
    LoadReport: TToolButton;
    Images: TImageList;
    ToolButton1: TToolButton;
    ExitButton: TSpeedButton;
    QRPreview: TQRPreview;
    Splitter1: TSplitter;
    Spacer2: TToolButton;
    Tabs: TPageControl;
    TabThumbs: TTabSheet;
    TabSearchResult: TTabSheet;
    Splitter2: TSplitter;
    GroupBox1: TGroupBox;
    SearchResultBox: TListBox;
    SearchTextLabel: TLabel;
    ThumbGrid: TDrawGrid;
    Spacer3: TToolButton;
    Spacer4: TToolButton;
    FindButton: TToolButton;
    Spacer1: TToolButton;
    GotoPageButton: TToolButton;
    Spacer5: TToolButton;
    PopupMenu1: TPopupMenu;
    JPG1: TMenuItem;
    N1: TMenuItem;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ZoomToFitClick(Sender: TObject);
    procedure ZoomTo100Click(Sender: TObject);
    procedure ZoomToWidthClick(Sender: TObject);
    procedure FirstPageClick(Sender: TObject);
    procedure PrevPageClick(Sender: TObject);
    procedure NextPageClick(Sender: TObject);
    procedure LastPageClick(Sender: TObject);
    procedure PrintClick(Sender: TObject);
    procedure ExitClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure SaveClick(Sender: TObject);
    procedure PrintSetupClick(Sender: TObject);
    procedure LoadClick(Sender: TObject);
    procedure QRPreviewPageAvailable(Sender: TObject; PageNum: Integer);
    procedure QRPreviewProgressUpdate(Sender: TObject; Progress: Integer);
    procedure FormCreate(Sender: TObject);
    procedure QRPreviewHyperlink(Sender: TObject; EventType: TQRHyperlinkEventType; Link: string; var Handled: Boolean);
    procedure OutlineViewChange(Sender: TObject; Node: TTreeNode);
    procedure ThumbGridDrawCell(Sender: TObject; ACol, ARow: Integer; ARect: TRect; State: TGridDrawState);
    procedure ThumbGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    procedure FindButtonClick(Sender: TObject);
    procedure GotoPageButtonClick(Sender: TObject);
    procedure JPG1Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
  private
    FQRPrinter: TQRPrinter;
    FReportOrientation: TPrinterOrientation;
    Gauge: TProgressBar;
    LastProgress: integer;
    ThumbFontHeight,
      ThumbDrawHeight,
      ThumbDrawWidth,
      ThumbTopMargin,
      ThumbLeftMargin: integer;
    ShowThumbs, ShowSearch: boolean;
    InitZoom: TQRZoomstate;
  public
    constructor CreatePreview(AOwner: TComponent; aQRPrinter: TQRPrinter); virtual;
    procedure Show;
    procedure UpdateInfo;
    procedure SelectPage(aPageNumber: integer);
    procedure ResizeThumb(Sender: TObject);
    function GetTextSearch(var MatchCase: boolean; var AText: string): boolean;
    property QRPrinter: TQRPrinter read FQRPrinter write FQRPrinter;
  end;

  TResizeGrid = class(TDrawGrid)
  public
    property OnResize;
  end;

implementation

uses
  qrsearchdlg, quickrpt;
var
  ThumbUpdating: boolean;
  ReportTitle: string;
//  QRSearch;
{$R *.DFM}

constructor TQRStandardPreview.CreatePreview(AOwner: TComponent; aQRPrinter: TQRPrinter);
begin
  inherited Create(AOwner);
  QRPrinter := aQRPrinter;
  if qrprinter.parentreport is TCustomquickrep then
  begin
    FormStyle := TCustomquickrep(qrprinter.ParentReport).PrevFormstyle;
    width := TCustomquickrep(qrprinter.ParentReport).PreviewWidth;
    height := TCustomquickrep(qrprinter.ParentReport).Previewheight;
    WindowState := TCustomquickrep(qrprinter.ParentReport).PreviewInitialState;
    ShowThumbs := TCustomquickrep(qrprinter.ParentReport).PrevShowThumbs;
    ShowSearch := TCustomquickrep(qrprinter.ParentReport).PrevShowSearch;
    InitZoom := TCustomquickrep(qrprinter.ParentReport).PrevInitialZoom;
    reportTitle := TCustomquickrep(qrprinter.ParentReport).ReportTitle;
    FReportOrientation := TCustomquickrep(qrprinter.ParentReport).Page.Orientation;
  end
  else
  begin // this should never happen
    WindowState := wsMaximized;
    ShowThumbs := true;
    ShowSearch := true;
  end;
  QRPreview.QRPrinter := aQRPrinter;
  if (QRPrinter <> nil) and (QRPrinter.Title <> '') then Caption := QRPrinter.Title;
  Gauge := TProgressBar.Create(Self);
  Gauge.Top := 2;
  Gauge.Left := 2;
  Gauge.Height := 10;
  Gauge.Width := 100;
  LastProgress := 0;
  Tabs.Visible := ShowThumbs or ShowSearch;
  TabThumbs.TabVisible := ShowThumbs;
  if not ShowSearch then
  begin
    TabSearchResult.TabVisible := false;
    findButton.Visible := false;
  end;
  if InitZoom = QRZoomtofit then
  begin
    QRPreview.ZoomToFit;
    ZoomFit.Down := true;
  end
  else if InitZoom = QRZoomtowidth then
  begin
    QRPreview.ZoomToWidth;
    ZoomToWidth.Down := true;
  end
  else
  begin
    QRPreview.Zoom := 100;
    QRPreview.UpdateZoom;
    Zoom100.Down := true;
  end;
  if qrprinter.status = mpFinished then
    Print.Enabled := true;
end;

procedure TQRStandardPreview.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  QRPrinter.ClosePreview(Self);
  //QRPrinter.ClosePreviewA(Self);
  Action := caFree;
end;

procedure TQRStandardPreview.UpdateInfo;
begin
  StatusBar.Panels[1].Text := SqrPage + ' ' + IntToStr(QRPreview.PageNumber) + ' ' +
    SqrOf + ' ' + IntToStr(QRPreview.QRPrinter.PageCount);

  StatusBar.Panels[2].Text := ReportTitle;

end;

procedure TQRStandardPreview.ZoomToFitClick(Sender: TObject);
begin
  Application.ProcessMessages;
  QRPreview.ZoomToFit;
end;

procedure TQRStandardPreview.ZoomTo100Click(Sender: TObject);
begin
  Application.ProcessMessages;
  QRPreview.Zoom := 100;
  QRPreview.UpdateZoom;
end;

procedure TQRStandardPreview.ZoomToWidthClick(Sender: TObject);
begin
  Application.ProcessMessages;
  QRPreview.ZoomToWidth;
end;

procedure TQRStandardPreview.SelectPage(aPageNumber: integer);
begin
  QRPreview.PageNumber := APageNumber;
  UpdateInfo;
  // set thumb row
  if (aPagenumber > 0) and (aPagenumber <= QRPrinter.PageCount) then
  begin
    ThumbUpdating := true;
    ThumbGrid.Row := APageNumber - 1;
    ThumbUpdating := false;
  end;
end;

procedure TQRStandardPreview.FirstPageClick(Sender: TObject);
begin
  SelectPage(1)
end;

procedure TQRStandardPreview.PrevPageClick(Sender: TObject);
begin
  SelectPage(QRPreview.PageNumber - 1);
end;

procedure TQRStandardPreview.NextPageClick(Sender: TObject);
begin
  SelectPage(QRPreview.PageNumber + 1);
end;

procedure TQRStandardPreview.LastPageClick(Sender: TObject);
begin
  SelectPage(QRPrinter.PageCount);
end;

procedure TQRStandardPreview.PrintClick(Sender: TObject);
begin
  QRPrinter.Print;
end;

procedure TQRStandardPreview.ExitClick(Sender: TObject);
begin
  Close;
end;

procedure TQRStandardPreview.FormResize(Sender: TObject);
begin
  QRPreview.UpdateZoom;
end;

procedure TQRStandardPreview.Show;
begin
  inherited Show;
  UpdateInfo;
end;

procedure TQRStandardPreview.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_Next: if Shift = [ssCtrl] then
        LastPageClick(Self)
      else
        NextPageClick(Self);
    VK_Prior: if Shift = [ssCtrl] then
        FirstPageClick(Self)
      else
        PrevPageClick(Self);
    VK_Home: FirstPageClick(Self);
    VK_End: LastPageClick(Self);
    VK_Escape: ExitClick(self)
  end;
end;

procedure TQRStandardPreview.SaveClick(Sender: TObject);
var
  aExportFilter: TQRExportFilter;
  FileExt: string;
  I: integer;
begin
  aExportFilter := nil;
  with TSaveDialog.Create(Application) do
  try
    Title := SqrSaveReport;
    Filter := QRExportFilterLibrary.SaveDialogFilterString;
    DefaultExt := cQRPDefaultExt;
    if Execute then
    begin
      if FilterIndex = 1 then
        QRPrinter.Save(Filename)
      else
      begin
        try
          aExportFilter := TQRExportFilterLibraryEntry(
            QRExportFilterLibrary.Filters[FilterIndex - 2]).ExportFilterClass.Create(Filename);
          QRPrinter.ExportToFilter(aExportFilter);
        finally
          aExportFilter.Free
        end
      end
    end;
  finally
    Free;
  end;
end;

procedure TQRStandardPreview.PrintSetupClick(Sender: TObject);
var
  prep: TCustomquickrep;
begin
  QRPrinter.PrintSetup;
  if qrprinter.ParentReport is TCustomquickrep then
  begin
    prep := TCustomquickrep(qrprinter.ParentReport);
    qrprinter.PrinterIndex := prep.PrinterSettings.printerindex;
    QRPrinter.aPrinterSettings.OutputBin := TQRBin(prep.UserPrinterSettings.CustomBinCode);
    QRPrinter.aPrinterSettings.Collate := prep.UserPrinterSettings.Collate;
    QRPrinter.aPrinterSettings.ColorOption := prep.UserPrinterSettings.ColorOption;
    QRPrinter.aPrinterSettings.PrintQuality := prep.UserPrinterSettings.PrintQuality;
    QRPrinter.aPrinterSettings.Copies := prep.UserPrinterSettings.Copies;
    QRPrinter.aPrinterSettings.Duplex := prep.UserPrinterSettings.ExtendedDuplex = 1;
    QRPrinter.aPrinterSettings.CustomBinCode := prep.UserPrinterSettings.CustomBinCode;
    QRPrinter.aPrinterSettings.UseCustomBinCode := prep.PrinterSettings.UseCustomBinCode;
    QRprinter.FirstPage := prep.PrinterSettings.FirstPage;
    QRprinter.LastPage := prep.PrinterSettings.LastPage;
    QRPrinter.aPrinterSettings.Duplex := prep.UserPrinterSettings.Duplex;
  end;
end;

procedure TQRStandardPreview.LoadClick(Sender: TObject);
begin
  with TOpenDialog.Create(Application) do
  try
    Title := SqrLoadReport;
    Filter := SqrQRFile + ' (*.' + cQRPDefaultExt + ')|*.' + cqrpDefaultExt;
    if Execute then
      if FileExists(FileName) then
      begin
        QRPrinter.Load(Filename);
        reportTitle := filename;
        QRPreview.PageNumber := 1;
        QRPreview.PreviewImage.PageNumber := 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -