📄 sctprev.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 + -