easypreviewdlg.pas.svn-base
来自「支持自定义语法高亮显示的编辑器控件」· SVN-BASE 代码 · 共 348 行
SVN-BASE
348 行
{***********************************************************}
{ }
{ Print preview dialog }
{ }
{ Copyright (c) 1992-2002 Altium Limited }
{ All rights reserved. }
{ }
{ http://www.dream-com.com }
{ contact@dream-com.com }
{ }
{***********************************************************}
unit EasyPreviewDlg;
interface
{$I Easy.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
{$IFDEF _DELPHI4}
ImgList,
{$ENDIF}
ComCtrls, ToolWin, ExtCtrls, StdCtrls, Buttons,
EasyPrint, EasyEditor, EasyUtils, EasySettings;
type
TPreviewForm = class(TForm)
EasyPrintPreview: TEasyPrintPreview;
ToolbarImages: TImageList;
ToolBar1: TToolBar;
tbPrint: TToolButton;
tbMagnifier: TToolButton;
tbOnePage: TToolButton;
tbMultiplePages: TToolButton;
cbZoom: TComboBox;
btClose: TButton;
sbFirstPage: TSpeedButton;
sbPrevPage: TSpeedButton;
sbNextPage: TSpeedButton;
sbLastPage: TSpeedButton;
tbPrintSetup: TToolButton;
PrintDialog: TPrintDialog;
procedure tbPrintClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tbOnePageClick(Sender: TObject);
procedure btCloseClick(Sender: TObject);
procedure EasyPrintPreviewResize(Sender: TObject);
procedure cbZoomClick(Sender: TObject);
procedure cbZoomKeyPress(Sender: TObject; var Key: Char);
procedure sbFirstPageClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tbMultiplePagesClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure tbPrintSetupClick(Sender: TObject);
procedure tbMagnifierClick(Sender: TObject);
procedure EasyPrintPreviewChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FFixedScale : boolean;
FScaleType : TEasyScaleType;
FDialogSettings : TEasyDialogSettings;
procedure SetScale(AScale : integer);
function GetEdit : TCustomEasyEdit;
procedure SetEdit(Value : TCustomEasyEdit);
procedure ChangeZoom(AUpdate : boolean);
procedure UpdatePageButtons;
{ Private declarations }
public
property Edit : TCustomEasyEdit read GetEdit write SetEdit;
{ Public declarations }
end;
var
PreviewForm: TPreviewForm;
function PrintPreview(AEdit : TCustomEasyEdit) : TEasyPrintPreview;
function PrintPreviewEx(AEdit : TCustomEasyEdit; AState : TWindowState) : TEasyPrintPreview;
implementation
{$IFNDEF EASY_CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}
type
TMPrintPreview = class(TEasyPrintPreview);
const
sPreview = 'Preview [%s]';
{--------------------------------------------}
function PrintPreview(AEdit : TCustomEasyEdit) : TEasyPrintPreview;
begin
result := PrintPreviewEx(AEdit, wsNormal);
end;
{--------------------------------------------}
function PrintPreviewEx(AEdit : TCustomEasyEdit; AState : TWindowState) : TEasyPrintPreview;
begin
with TPreviewForm.Create(Application) do
begin
WindowState := AState;
result := EasyPrintPreview;//am
Edit := AEdit;
Show;
end;
end;
{--------------------------------------------}
function RemovePercent(const s : string) : string;
var
Len : integer;
begin
result := s;
Len := Length(result);
if (Len <> 0) and (result[Len] = '%') then
Delete(result, Len, 1);
end;
{--------------------------------------------}
procedure TPreviewForm.tbPrintClick(Sender: TObject);
begin
with PrintDialog do
EasyPrintPreview.PrintEx(MinPage, MaxPage, PrintRange = prPageNums, Copies);
end;
{--------------------------------------------}
procedure TPreviewForm.FormCreate(Sender: TObject);
begin
FFixedScale := true;
FDialogSettings := TEasyDialogSettings.Create(self);
FDialogSettings.Key := 'PreviewDlg';
FDialogSettings.LoadSettings;
end;
{--------------------------------------------}
procedure TPreviewForm.tbOnePageClick(Sender: TObject);
begin
with EasyPrintPreview do
begin
Columns := 1;
Rows := 1;
SetScale(100);
ChangeZoom(true);
end;
FFixedScale := true;
end;
{--------------------------------------------}
procedure TPreviewForm.btCloseClick(Sender: TObject);
begin
Close;
end;
{--------------------------------------------}
procedure TPreviewForm.SetScale(AScale : integer);
begin
with TMPrintPreview(EasyPrintPreview) do
begin
Scale := AScale;
AdjustToRect(ClientRect);
end;
end;
{--------------------------------------------}
procedure TPreviewForm.EasyPrintPreviewResize(Sender: TObject);
begin
with TMPrintPreview(EasyPrintPreview) do
if FFixedScale then
AdjustToRect(ClientRect)
else
AdjustToScale(ClientRect, FScaleType);
ChangeZoom(false);
end;
{--------------------------------------------}
function TPreviewForm.GetEdit : TCustomEasyEdit;
begin
result := EasyPrintPreview.Editor;
end;
{--------------------------------------------}
procedure TPreviewForm.SetEdit(Value : TCustomEasyEdit);
begin
InitPrintSettings(Value);
EasyPrintPreview.PageIndex := 0;
EasyPrintPreview.Editor := nil;
EasyPrintPreview.Editor := Value;
Caption := Format(sPreview, [Value.EditSource.FileName]);
end;
{--------------------------------------------}
procedure TPreviewForm.cbZoomClick(Sender: TObject);
var
s : string;
begin
FFixedScale := true;
with cbZoom do
case ItemIndex of
0 .. 7 :
begin
s := Items[ItemIndex];
SetScale(StrToInt(RemovePercent(s)));
end
else
begin
FFixedScale := false;
FScaleType := TEasyScaleType(ItemIndex - 8);
EasyPrintPreviewResize(Self);
end;
end;
ChangeZoom(false);
end;
{--------------------------------------------}
procedure TPreviewForm.ChangeZoom(AUpdate : boolean);
begin
if not FFixedScale or AUpdate then
cbZoom.Text := IntToStr(EasyPrintPreview.Scale) + '%';
end;
{--------------------------------------------}
procedure TPreviewForm.UpdatePageButtons;
begin
with EasyPrintPreview do
begin
sbPrevPage.Enabled := PageIndex > 0;
sbNextPage.Enabled := PageIndex < PageCount - 1;
end;
end;
{--------------------------------------------}
procedure TPreviewForm.cbZoomKeyPress(Sender: TObject; var Key: Char);
var
i : integer;
s : string;
begin
if Key in [#13, #10] then
begin
s := cbZoom.Text;
with cbZoom, Items do
for i := 0 to Count -1 do
if Strings[i] = s then
begin
ItemIndex := i;
cbZoomClick(Sender);
Exit;
end;
FFixedScale := true;
SetScale(StrToint(RemovePercent(s)));
Key := #0;
end;
end;
{--------------------------------------------}
procedure TPreviewForm.sbFirstPageClick(Sender: TObject);
begin
with EasyPrintPreview do
case (Sender as TSpeedButton).Tag of
0 : PageIndex := 0;
1 : PageIndex := Max(PageIndex - 1, 0);
2 : PageIndex := Min(PageIndex + 1, PageCount - 1);
3 : PageIndex := PageCount - 1;
end;
UpdatePageButtons;
end;
{--------------------------------------------}
procedure TPreviewForm.FormShow(Sender: TObject);
begin
UpdatePageButtons;
end;
{--------------------------------------------}
procedure TPreviewForm.tbMultiplePagesClick(Sender: TObject);
begin
FFixedScale := true;
SetScale(25);
ChangeZoom(true);
end;
{--------------------------------------------}
procedure TPreviewForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
{--------------------------------------------}
procedure TPreviewForm.tbPrintSetupClick(Sender: TObject);
begin
with PrintDialog do
begin
MaxPage := EasyPrintPreview.PageCount - 1;
Execute;
end;
end;
{--------------------------------------------}
procedure TPreviewForm.tbMagnifierClick(Sender: TObject);
begin
EasyPrintPreview.UseMagnifier := tbMagnifier.Down;
end;
{--------------------------------------------}
procedure TPreviewForm.EasyPrintPreviewChange(Sender: TObject);
begin
UpdatePageButtons;
ChangeZoom(true);
end;
{--------------------------------------------}
procedure TPreviewForm.FormDestroy(Sender: TObject);
begin
FDialogSettings.SaveSettings;
if PreviewForm = Self then
PreviewForm := nil;
end;
{--------------------------------------------}
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?