📄 myprev.pas
字号:
unit myprev;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Aceprev, ExtCtrls,
Menus, Buttons, AceFile, Acemeter;
type
TViewerMode = set of (vmGenerating, vmPrinting);
TViewer = class(TForm)
Preview: TAcePreview;
PrinterSetup: TPrinterSetupDialog;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Close1: TMenuItem;
N1: TMenuItem;
Save1: TMenuItem;
N2: TMenuItem;
PrintSetup1: TMenuItem;
Print1: TMenuItem;
N3: TMenuItem;
mitemExit: TMenuItem;
OpenFileDialog: TOpenDialog;
SaveFileDialog: TSaveDialog;
ToolBar: TPanel;
sendprinter: TSpeedButton;
btnClose: TSpeedButton;
ZoomValues: TComboBox;
Options1: TMenuItem;
ViewToolbar: TMenuItem;
CursorPosition: TPanel;
firstpage: TSpeedButton;
PreviousPage: TSpeedButton;
NextPage: TSpeedButton;
LastPage: TSpeedButton;
PageNum: TLabel;
TreeducerPrint1: TMenuItem;
LoadMeter: TAceMeter;
Stop: TSpeedButton;
Navigate1: TMenuItem;
NextPage1: TMenuItem;
PriorPage1: TMenuItem;
LastPage1: TMenuItem;
FirstPage1: TMenuItem;
GotoPage1: TMenuItem;
procedure Open1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure PrintSetup1Click(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure ViewToolbarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure firstpageClick(Sender: TObject);
procedure PreviousPageClick(Sender: TObject);
procedure NextPageClick(Sender: TObject);
procedure LastPageClick(Sender: TObject);
procedure Close1Click(Sender: TObject);
procedure ZoomValuesChange(Sender: TObject);
procedure sendprinterClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure StopClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure GotoPage1Click(Sender: TObject);
private
{ Private declarations }
ShowFirst: Boolean;
FOnAbort: TNotifyEvent;
FGenerating: Boolean;
FViewerMode: TViewerMode;
procedure SetGenerating( Value: Boolean);
public
{ Public declarations }
function GetLoadPercent: Single;
procedure UpdatePage;
procedure SetAceFile(AF: TAceFile);
procedure UpdateStatus(Sender: TObject);
property OnAbort: TNotifyEvent read FOnAbort write FOnAbort;
property Generating: Boolean read FGenerating write SetGenerating;
property ViewerMode: TViewerMode read FViewerMode write FViewerMode;
procedure UpdateControls;
end;
var
Viewer: TViewer;
implementation
uses printers, aceout, clipbrd, acedest, acepstat, acegoto,acesetup ;
{$R *.DFM}
procedure TViewer.Open1Click(Sender: TObject);
begin
if OpenFileDialog.Execute then
begin
Preview.LoadFromFile(OpenFileDialog.FileName);
ZoomValues.ItemIndex := Ord(Preview.AceZoom);
end;
end;
procedure TViewer.Save1Click(Sender: TObject);
begin
if SaveFileDialog.Execute then
Preview.SaveToFile(SaveFileDialog.FileName);
end;
procedure TViewer.PrintSetup1Click(Sender: TObject);
begin
Preview.AcePrinterSetup.SetData;
printersetup.execute;
Preview.AcePrinterSetup.GetData;
ZoomValuesChange(ZoomValues);
end;
procedure TViewer.btnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TViewer.ViewToolbarClick(Sender: TObject);
begin
TMenuItem(Sender).Checked := Not TMenuItem(Sender).Checked;
ToolBar.Visible := TMenuItem(Sender).Checked;
end;
procedure TViewer.FormCreate(Sender: TObject);
begin
FGenerating := False;
ShowFirst := True;
end;
procedure TViewer.firstpageClick(Sender: TObject);
begin
Preview.FirstPage;
UpdatePage;
end;
procedure TViewer.PreviousPageClick(Sender: TObject);
begin
Preview.PriorPage;
UpdatePage;
end;
procedure TViewer.NextPageClick(Sender: TObject);
begin
Preview.NextPage;
UpdatePage;
end;
procedure TViewer.LastPageClick(Sender: TObject);
begin
Preview.LastPage;
UpdatePage;
end;
procedure TViewer.UpdatePage;
begin
LoadMeter.Progress := Round(GetLoadPercent);
PageNum.Caption := 'Page: ' + IntToStr(Preview.page) + '/' + IntToStr(Preview.PageCount);
if ShowFirst And ((Preview.PageCount > 1) Or (LoadMeter.Progress = 100)) then
begin
ShowFirst := False;
Preview.Invalidate;
end;
if Preview.Description = '' then Caption := 'Preview'
else Caption := Preview.Description;
if LoadMeter.Progress = 100 then Generating := False;
end;
procedure TViewer.SetAceFile(AF: TAceFile);
begin
LoadMeter.Progress := 0;
ShowFirst := True;
Preview.LoadFromAceFile(AF);
Preview.AcePrinterSetup := AF.AcePrinterSetup;
ZoomValues.ItemIndex := Ord(Preview.AceZoom);
Generating := True;
end;
procedure TViewer.Close1Click(Sender: TObject);
begin
Preview.Filer.Acefile.free;
Preview.Filer.Acefile := nil;
Preview.Invalidate;
end;
procedure TViewer.ZoomValuesChange(Sender: TObject);
begin
Preview.AceZoom := TAceZoom( TComboBox(Sender).ItemIndex );
end;
procedure TViewer.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);
UpdateControls;
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);
UpdateControls;
end;
end;
procedure TViewer.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;
function TViewer.GetLoadPercent: Single;
begin
result := 0;
if Preview.Filer.AceFile <> nil then
result := TAceAceFile(Preview.Filer.AceFile).PercentDone;
end;
procedure TViewer.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 TViewer.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);
UpdateControls;
end;
procedure TViewer.UpdateStatus(Sender: TObject);
begin
UpdatePage;
end;
procedure TViewer.FormResize(Sender: TObject);
begin
ZoomValuesChange(ZoomValues);
end;
procedure TViewer.UpdateControls;
begin
File1.Enabled := FViewerMode = [];
end;
procedure TViewer.GotoPage1Click(Sender: TObject);
var
ag: TAceGotoPage;
pg: Integer;
begin
ag := TAceGotoPage.Create(self);
try
if (ag.ShowModal = mrOk) then
begin
pg := StrToInt(ag.PageNum.Text);
Preview.Page := pg;
UpdatePage;
end;
finally
ag.free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -