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

📄 sctprev.pas

📁 suite component ace report
💻 PAS
字号:
unit Sctprev;

{ ----------------------------------------------------------------
  Ace Reporter Version 1.0
  Copyright 1995 SCT Accociates, Inc.
  Written by Kevin Maher, Steve Tyrakowski
  ---------------------------------------------------------------- }

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Buttons, ExtCtrls, StdCtrls, Mask, {sctprint,} Spin,
  Aceprev, aceout, sctrep, acedest, acefile;

type
  TSctViewerMode = set of (vmGenerating, vmPrinting);

  TSctPreview = class(TForm)
    Panel1: TPanel;
    firstpage: TSpeedButton;
    PreviousPage: TSpeedButton;
    LastPage: TSpeedButton;
    NextPage: TSpeedButton;
    GroupBox1: TGroupBox;
    lbPage: TLabel;
    lbof: TLabel;
    ScrollBox1: TScrollBox;
    btnClose: TSpeedButton;
    PageNum: TEdit;
    PageCount: TEdit;
    GroupBox2: TGroupBox;
    lbZoom: TLabel;
    zoom: TEdit;
    SpinButton1: TSpinButton;
    sendprinter: TSpeedButton;
    fitwidth: TSpeedButton;
    fitheight: TSpeedButton;
    fitpage: TSpeedButton;
    Preview: TAcePreview;
    stop: TSpeedButton;
    procedure firstpageClick(Sender: TObject);
    procedure PreviousPageClick(Sender: TObject);
    procedure NextPageClick(Sender: TObject);
    procedure LastPageClick(Sender: TObject);
    procedure SpinButton1DownClick(Sender: TObject);
    procedure SpinButton1UpClick(Sender: TObject);
    procedure sendprinterClick(Sender: TObject);
    procedure fitwidthClick(Sender: TObject);
    procedure fitheightClick(Sender: TObject);
    procedure fitpageClick(Sender: TObject);
    procedure stopClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
  private
    { Private declarations }
     FOnAbort: TNotifyEvent;
     FGenerating: Boolean;
     ShowFirst: Boolean;
     FViewerMode: TSctViewerMode;
     procedure SetGenerating( Value: Boolean);
  public
    { Public declarations }
    property Generating: Boolean read FGenerating write SetGenerating;
    property OnAbort: TNotifyEvent read FOnAbort write FOnAbort;
    property ViewerMode: TSctViewerMode read FViewerMode write FViewerMode;
    procedure SetAceFile(AF: TAceFile);
    procedure UpdatePage;
    procedure UpdateStatus(Sender: TObject);
 end;

var
  SctPreview: TSctPreview;

implementation

uses sctconst, acepstat, acesetup;

{$R *.DFM}

procedure TSctPreview.firstpageClick(Sender: TObject);
begin
  if Preview <> nil Then Preview.FirstPage;
  UpdatePage;
end;

procedure TSctPreview.PreviousPageClick(Sender: TObject);
begin
  if Preview <> nil Then Preview.PriorPage;
  UpdatePage;
end;

procedure TSctPreview.NextPageClick(Sender: TObject);
begin
  if Preview <> nil Then Preview.NextPage;
  UpdatePage;
end;

procedure TSctPreview.LastPageClick(Sender: TObject);
begin
  if Preview <> nil then Preview.LastPage;
  UpdatePage;
end;

procedure TSctPreview.SpinButton1DownClick(Sender: TObject);
var
  down: Integer;
begin
  if Preview <> nil Then
  begin
    down := Preview.Zoom mod 10;
    if Preview.Zoom > 40 Then Preview.Zoom := Preview.zoom - (10 + down);
  end;
  UpdatePage;
end;

procedure TSctPreview.SpinButton1UpClick(Sender: TObject);
var
  up: Integer;
begin
  if Preview <> nil Then
  begin
    up := Preview.Zoom mod 10;
    if Preview.Zoom < 500 Then Preview.Zoom := Preview.Zoom + (10 - up);
  end;
  UpdatePage;
end;

procedure TSctPreview.sendprinterClick(Sender: TObject);
var
  pd: TAcePrintDestination;
  ps: TAcePreviewStatus;
  CopyPS: TAcePrinterSetup;
begin
  CopyPS := TAcePrinterSetup.Create;
  CopyPS.Assign(Preview.AcePrinterSetup);

  pd := TAcePrintDestination.Create(Application);
  pd.Viewer := Self;
  pd.Preview := Preview;
  pd.AcePrinterSetup := Preview.AcePrinterSetup;
  pd.AcePrinterSetup.SetData;
  try
    if (pd.ShowModal = mrOk) then
    begin
      Include(FViewerMode, vmPrinting);
      ps := TAcePreviewStatus.Create(Self);
      try
        ps.Preview := Preview;
        ps.Show;
{        Preview.IgnorePrinterSettings := pd.OverrideSettings.Checked;}
        Preview.IgnorePrinterSettings := Not CopyPS.IsEqual(pd.AcePrinterSetup);
        Preview.PrintStatus := ps.UpdateStatus;
        Preview.SendPagesToPrinter(pd.StartPage, pd.EndPage);
      finally
        ps.free;
      end;
    end;
  finally
    CopyPS.Free;
    pd.free;
    Exclude(FViewerMode, vmPrinting);
  end;
end;


procedure TSctPreview.fitwidthClick(Sender: TObject);
begin
  Preview.ZoomWidth;
  UpdatePage;
end;

procedure TSctPreview.fitheightClick(Sender: TObject);
begin
  Preview.ZoomHeight;
  UpdatePage;
end;

procedure TSctPreview.fitpageClick(Sender: TObject);
begin
  Preview.ZoomPage;
  UpdatePage;
end;

procedure TSctPreview.stopClick(Sender: TObject);
begin
  if Assigned(FOnAbort) then
  begin
    try
      FOnAbort(Self);
    except
      Application.HandleException(Self);
    end;
  end;
  { make sure this isn't called again }
  FOnAbort := nil;

  Generating := False;
end;

procedure TSctPreview.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Generating And Assigned(FOnAbort) then
  begin
    try
      FOnAbort(Self);
    except
      Application.HandleException(Self);
    end;
  end;
  { make sure this isn't called again }
  FOnAbort := nil;
  Generating := False;

  Action := caFree;
end;

procedure TSctPreview.SetGenerating( Value: Boolean);
begin
  if FGenerating <> Value then
  begin
    FGenerating := Value;
  end;

  stop.Enabled := FGenerating;
  if Value then Include(FViewerMode, vmGenerating)
  else Exclude(FViewerMode, vmGenerating);

end;

procedure TSctPreview.FormCreate(Sender: TObject);
begin
  FGenerating := False;
end;

procedure TSctPreview.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TSctPreview.SetAceFile(AF: TAceFile);
begin
  ShowFirst := True;
  Preview.LoadFromAceFile(AF);
  Preview.AcePrinterSetup := AF.AcePrinterSetup;
  Generating := True;
end;

procedure TSctPreview.UpdatePage;
begin
  if ShowFirst And ((Preview.PageCount > 1) Or (Preview.LoadPercent = 100)) then
  begin
    ShowFirst := False;
    Preview.Invalidate;
  end;
  if (Preview.LoadPercent = 100) then Generating := False;
  if Preview <> nil Then
  begin
    PageNum.Text := IntToStr(Preview.Page);
    PageCount.Text := IntToStr(Preview.PageCount);
    Zoom.Text := IntToStr(Preview.Zoom);
  end;
end;

procedure TSctPreview.UpdateStatus(Sender: TObject);
begin
  UpdatePage;
end;


end.

⌨️ 快捷键说明

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