📄 synpagesetupdlg.pas
字号:
{-------------------------------------------------------------------------------
单元: 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 + -