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 + -
显示快捷键?