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

📄 synpagesetupdlg.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{-------------------------------------------------------------------------------

   单元: SynPageSetupDlg.pas

   作者: 姚乔锋

   日期: 2004.11.26

   说明: 页面设置对话框

   版本: 1.00 00

-------------------------------------------------------------------------------}

unit SynPageSetupDlg;

interface

uses
  Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, ComCtrls, ToolWin, ImgList, ActnList, Dialogs,
  SynEditPrintTypes, SynEditPrint, SynEditPrintMargins,
  SynEditPrintHeaderFooter, Menus;

type
  TSynPageSetupDlg = class(TForm)
    CancelBtn: TButton;
    PageControl: TPageControl;
    Margins: TTabSheet;
    HeaderFooter: TTabSheet;
    GroupBox1: TGroupBox;
    CBHeaderMirror: TCheckBox;
    ImageList1: TImageList;
    ActionList1: TActionList;
    PageNumCmd: TAction;
    PagesCmd: TAction;
    TimeCmd: TAction;
    DateCmd: TAction;
    FontCmd: TAction;
    BoldCmd: TAction;
    ItalicCmd: TAction;
    UnderlineCmd: TAction;
    FontDialog: TFontDialog;
    ColorDialog: TColorDialog;
    TitleCmd: TAction;
    GroupBox5: TGroupBox;
    EditTop: TEdit;
    EditBottom: TEdit;
    EditRight: TEdit;
    Label2: TLabel;
    Label1: TLabel;
    EditLeft: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    CBUnits: TComboBox;
    CBMirrorMargins: TCheckBox;
    Bevel1: TBevel;
    GroupBox6: TGroupBox;
    Label11: TLabel;
    EditGutter: TEdit;
    CBLineNumbersInMargin: TCheckBox;
    CBLineNumbers: TCheckBox;
    GroupBox7: TGroupBox;
    Label9: TLabel;
    Label10: TLabel;
    Label8: TLabel;
    EditLeftHFTextIndent: TEdit;
    EditRightHFTextIndent: TEdit;
    EditHFInternalMargin: TEdit;
    EditHeader: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    EditFooter: TEdit;
    Bevel2: TBevel;
    CBColors: TCheckBox;
    CBWrap: TCheckBox;
    CBHighlight: TCheckBox;
    Bevel3: TBevel;
    OKBtn: TButton;
    PopupMenu1: TPopupMenu;
    PageNumCmd1: TMenuItem;
    P1: TMenuItem;
    D1: TMenuItem;
    T1: TMenuItem;
    T2: TMenuItem;
    F1: TMenuItem;
    B1: TMenuItem;
    I1: TMenuItem;
    U1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    Bevel4: TBevel;
    Label18: TLabel;
    CBHeaderLine: TCheckBox;
    PBHeaderLine: TPaintBox;
    CBHeaderBox: TCheckBox;
    CBHeaderShadow: TCheckBox;
    PBHeaderShadow: TPaintBox;
    GroupBox2: TGroupBox;
    Bevel5: TBevel;
    Label22: TLabel;
    PBFooterLine: TPaintBox;
    PBFooterShadow: TPaintBox;
    CBFooterMirror: TCheckBox;
    CBFooterLine: TCheckBox;
    CBFooterBox: TCheckBox;
    CBFooterShadow: TCheckBox;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    REHeaderLeft: TRichEdit;
    REHeaderCenter: TRichEdit;
    REHeaderRight: TRichEdit;
    PageControl2: TPageControl;
    TabSheet4: TTabSheet;
    REFooterLeft: TRichEdit;
    TabSheet5: TTabSheet;
    REFooterCenter: TRichEdit;
    TabSheet6: TTabSheet;
    REFooterRight: TRichEdit;
    Label12: TLabel;
    procedure PageNumCmdExecute(Sender: TObject);
    procedure PagesCmdExecute(Sender: TObject);
    procedure TimeCmdExecute(Sender: TObject);
    procedure DateCmdExecute(Sender: TObject);
    procedure FontCmdExecute(Sender: TObject);
    procedure BoldCmdExecute(Sender: TObject);
    procedure ItalicCmdExecute(Sender: TObject);
    procedure UnderlineCmdExecute(Sender: TObject);
    procedure REHeaderLeftEnter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CBFooterLineEnter(Sender: TObject);
    procedure PageControlChange(Sender: TObject);
    procedure HeaderLineColorBtnClick(Sender: TObject);
    procedure PBHeaderLinePaint(Sender: TObject);
    procedure HeaderShadowColorBtnClick(Sender: TObject);
    procedure FooterLineColorBtnClick(Sender: TObject);
    procedure FooterShadowColorBtnClick(Sender: TObject);
    procedure REHeaderLeft1SelectionChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure CBUnitsChange(Sender: TObject);
    procedure TitleCmdExecute(Sender: TObject);
  private
    { Private declarations }
    Editor: TRichEdit;
    CharPos: TPoint;
    OldStart: Integer;
    FMargins: TSynEditPrintMargins;
    FInternalCall: Boolean;
    procedure SetOptions;
    procedure UpdateCursorPos;
    procedure SelectLine(LineNum: Integer);
    function CurrText: TTextAttributes;
    procedure SetMargins(SynEditMargins: TSynEditPrintMargins);
    procedure GetMargins(SynEditMargins: TSynEditPrintMargins);
    procedure AddLines(HeadFoot: THeaderFooter; AEdit: TRichEdit;
      Al: TALignment);
    procedure SelectNone;
  public
    { Public declarations }
    procedure Execute(Print: TSynEditPrint);
    procedure SetValues(SynEditPrint: TSynEditPrint);
    procedure GetValues(SynEditPrint: TSynEditPrint);
  end;

implementation

uses
  RichEdit, ShellAPI, Messages;

{$R *.DFM}

procedure TSynPageSetupDlg.FormCreate(Sender: TObject);
begin
  FMargins := TSynEditPrintMargins.Create;
  FInternalCall := False;
  Editor := REHeaderLeft;
end;

procedure TSynPageSetupDlg.FormDestroy(Sender: TObject);
begin
  FMargins.Free;
end;

procedure TSynPageSetupDlg.FormShow(Sender: TObject);
begin
  Editor := REHeaderLeft;
  PageControl.ActivePage := Margins;
  SetOptions;
  UpdateCursorPos;
end;

procedure TSynPageSetupDlg.SetOptions;
begin
  PageNumCmd.Enabled := Editor.Focused;
  PagesCmd.Enabled := Editor.Focused;
  TimeCmd.Enabled := Editor.Focused;
  DateCmd.Enabled := Editor.Focused;
  TitleCmd.Enabled := Editor.Focused;
  FontCmd.Enabled := Editor.Focused;
  BoldCmd.Enabled := Editor.Focused;
  ItalicCmd.Enabled := Editor.Focused;
  UnderlineCmd.Enabled := Editor.Focused;
end;

procedure TSynPageSetupDlg.REHeaderLeftEnter(Sender: TObject);
begin
  Editor := Sender as TRichEdit;
  SetOptions;
end;

procedure TSynPageSetupDlg.CBFooterLineEnter(Sender: TObject);
begin
  SetOptions;
end;

procedure TSynPageSetupDlg.REHeaderLeft1SelectionChange(Sender: TObject);
begin
  UpdateCursorPos;
end;

procedure TSynPageSetupDlg.UpdateCursorPos;
begin
  CharPos.Y := SendMessage(Editor.Handle, EM_EXLINEFROMCHAR, 0, Editor.SelStart);
  CharPos.X := (Editor.SelStart - SendMessage(Editor.Handle, EM_LINEINDEX, CharPos.Y, 0));
end;

procedure TSynPageSetupDlg.SelectLine(LineNum: Integer);
begin
  OldStart := Editor.SelStart;
  Editor.SelStart := SendMessage(Editor.Handle, EM_LINEINDEX, LineNum, 0);
  Editor.SelLength := Length(Editor.Lines[LineNum]);
end;

procedure TSynPageSetupDlg.SelectNone;
begin
  Editor.SelStart := OldStart;
  Editor.SelLength := 0;
end;

function TSynPageSetupDlg.CurrText: TTextAttributes;
begin
  Result := Editor.SelAttributes;
end;

procedure TSynPageSetupDlg.PageNumCmdExecute(Sender: TObject);
begin
  Editor.SelText := '$PAGENUM$';
end;

procedure TSynPageSetupDlg.PagesCmdExecute(Sender: TObject);
begin
  Editor.SelText := '$PAGECOUNT$';
end;

procedure TSynPageSetupDlg.TimeCmdExecute(Sender: TObject);
begin
  Editor.SelText := '$TIME$';
end;

procedure TSynPageSetupDlg.DateCmdExecute(Sender: TObject);
begin
  Editor.SelText := '$DATE$';
end;

procedure TSynPageSetupDlg.TitleCmdExecute(Sender: TObject);
begin
  Editor.SelText := '$TITLE$';
end;

⌨️ 快捷键说明

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