📄 rxriched.pas
字号:
{$IFDEF RX_D3}
procedure CloseFindDialog(Dialog: TFindDialog); virtual;
procedure DoSetMaxLength(Value: Integer); override;
function GetSelLength: Integer; override;
function GetSelStart: Integer; override;
function GetSelText: string; override;
procedure SetSelLength(Value: Integer); override;
procedure SetSelStart(Value: Integer); override;
property AllowInPlace: Boolean read FAllowInPlace write FAllowInPlace default True;
{$ENDIF}
property AllowObjects: Boolean read FAllowObjects write SetAllowObjects default True;
property AutoURLDetect: Boolean read GetAutoURLDetect write SetAutoURLDetect default True;
property AutoVerbMenu: Boolean read FAutoVerbMenu write FAutoVerbMenu default True;
property HideSelection: Boolean read FHideSelection write SetHideSelection default True;
property HideScrollBars: Boolean read FHideScrollBars
write SetHideScrollBars default True;
property Title: string read FTitle write SetTitle;
property LangOptions: TRichLangOptions read GetLangOptions write SetLangOptions default [rlAutoFont];
property Lines: TStrings read FRichEditStrings write SetRichEditStrings;
property PlainText: Boolean read FPlainText write SetPlainText default False;
property SelectionBar: Boolean read FSelectionBar write SetSelectionBar default True;
property StreamFormat: TRichStreamFormat read GetStreamFormat write SetStreamFormat default sfDefault;
property StreamMode: TRichStreamModes read GetStreamMode write SetStreamMode default [];
property UndoLimit: Integer read FUndoLimit write SetUndoLimit default 100;
property WordSelection: Boolean read GetWordSelection write SetWordSelection default True;
property ScrollBars default ssBoth;
property TabStop default True;
property OnSaveClipboard: TRichEditSaveClipboard read FOnSaveClipboard
write FOnSaveClipboard;
property OnSelectionChange: TNotifyEvent read FOnSelChange write FOnSelChange;
property OnProtectChange: TRichEditProtectChange read FOnProtectChange
write FOnProtectChange; { obsolete }
property OnProtectChangeEx: TRichEditProtectChangeEx read FOnProtectChangeEx
write FOnProtectChangeEx;
property OnResizeRequest: TRichEditResizeEvent read FOnResizeRequest
write FOnResizeRequest;
property OnURLClick: TRichEditURLClickEvent read FOnURLClick write FOnURLClick;
property OnTextNotFound: TRichEditFindErrorEvent read FOnTextNotFound write FOnTextNotFound;
{$IFDEF RX_D3}
property OnCloseFindDialog: TRichEditFindCloseEvent read FOnCloseFindDialog
write FOnCloseFindDialog;
{$ENDIF}
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Clear; {$IFDEF RX_D3} override; {$ENDIF}
procedure SetSelection(StartPos, EndPos: Longint; ScrollCaret: Boolean);
function GetSelection: TCharRange;
function GetTextRange(StartPos, EndPos: Longint): string;
function LineFromChar(CharIndex: Integer): Integer;
function GetLineIndex(LineNo: Integer): Integer;
function GetLineLength(CharIndex: Integer): Integer;
function WordAtCursor: string;
function FindText(const SearchStr: string;
StartPos, Length: Integer; Options: TRichSearchTypes): Integer;
function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer;
{$IFDEF RX_D3} override; {$ENDIF}
function GetCaretPos: TPoint; {$IFDEF RX_V110} override; {$ENDIF}
function GetCharPos(CharIndex: Integer): TPoint;
function InsertObjectDialog: Boolean;
function ObjectPropertiesDialog: Boolean;
function PasteSpecialDialog: Boolean;
function FindDialog(const SearchStr: string): TFindDialog;
function ReplaceDialog(const SearchStr, ReplaceStr: string): TReplaceDialog;
function FindNext: Boolean;
procedure Print(const Caption: string); virtual;
class procedure RegisterConversionFormat(const AExtension: string;
APlainText: Boolean; AConversionClass: TConversionClass);
procedure ClearUndo;
procedure Redo;
procedure StopGroupTyping;
property CanFindNext: Boolean read GetCanFindNext;
property CanRedo: Boolean read GetCanRedo;
property CanPaste: Boolean read GetCanPaste;
{$IFNDEF RX_V110}
procedure Undo;
property CanUndo: Boolean read GetCanUndo;
property CaretPos: TPoint read GetCaretPos;
{$ENDIF}
property RedoName: TUndoName read GetRedoName;
property UndoName: TUndoName read GetUndoName;
property DefaultConverter: TConversionClass read FDefaultConverter
write FDefaultConverter;
property DefAttributes: TRxTextAttributes read FDefAttributes write SetDefAttributes;
property SelAttributes: TRxTextAttributes read FSelAttributes write SetSelAttributes;
property WordAttributes: TRxTextAttributes read FWordAttributes write SetWordAttributes;
property PageRect: TRect read FPageRect write FPageRect;
property Paragraph: TRxParaAttributes read FParagraph;
property SelectionType: TRichSelectionType read GetSelectionType;
end;
TRxRichEdit = class(TRxCustomRichEdit)
published
property Align;
property Alignment;
property AutoURLDetect;
property AutoVerbMenu;
property AllowObjects;
{$IFDEF RX_D3}
property AllowInPlace;
{$ENDIF}
{$IFDEF RX_D4}
property Anchors;
property BiDiMode;
property BorderWidth;
property DragKind;
{$ENDIF}
property BorderStyle;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property HideScrollBars;
property Title;
{$IFNDEF VER90}
property ImeMode;
property ImeName;
{$ENDIF}
{$IFDEF RX_D4}
property Constraints;
property ParentBiDiMode;
{$ENDIF}
property LangOptions;
property Lines;
property MaxLength;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PlainText;
property PopupMenu;
property ReadOnly;
property ScrollBars;
property SelectionBar;
property ShowHint;
property StreamFormat;
property StreamMode;
property TabOrder;
property TabStop;
property UndoLimit;
property Visible;
property WantTabs;
property WantReturns;
property WordSelection;
property WordWrap;
property OnChange;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
{$IFDEF RX_D5}
property OnContextPopup;
{$ENDIF}
{$IFDEF RX_D4}
property OnEndDock;
property OnStartDock;
{$ENDIF}
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF RX_D4}
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
{$ENDIF}
property OnProtectChange; { obsolete }
property OnProtectChangeEx;
property OnResizeRequest;
property OnSaveClipboard;
property OnSelectionChange;
property OnStartDrag;
property OnTextNotFound;
{$IFDEF RX_D3}
property OnCloseFindDialog;
{$ENDIF}
property OnURLClick;
end;
var
RichEditVersion: TRichEditVersion;
implementation
uses Printers, ComStrs, OleConst, OleDlg {$IFDEF RX_D3}, OleCtnrs {$ENDIF},
MaxMin;
const
RTFConversionFormat: TRichConversionFormat = (
ConversionClass: TConversion;
Extension: 'rtf';
PlainText: False;
Next: nil);
TextConversionFormat: TRichConversionFormat = (
ConversionClass: TConversion;
Extension: 'txt';
PlainText: True;
Next: @RTFConversionFormat);
var
ConversionFormatList: PRichConversionFormat = @TextConversionFormat;
const
RichEdit10ModuleName = 'RICHED32.DLL';
RichEdit20ModuleName = 'RICHED20.DLL';
{$IFNDEF RX_D3}
RICHEDIT_CLASSA = 'RichEdit20A'; { Richedit 2.0 Window Class }
RICHEDIT_CLASSW = 'RichEdit20W'; { Richedit 2.0 Unicode }
RICHEDIT_CLASS10A = 'RICHEDIT'; { Richedit 1.0 }
RICHEDIT_CLASS = RICHEDIT_CLASSA;
{$ENDIF}
{$IFNDEF RX_D3}
const
EM_SETUNDOLIMIT = WM_USER + 82;
EM_REDO = WM_USER + 84;
EM_CANREDO = WM_USER + 85;
EM_GETUNDONAME = WM_USER + 86;
EM_GETREDONAME = WM_USER + 87;
EM_STOPGROUPTYPING = WM_USER + 88;
EM_SETTEXTMODE = WM_USER + 89;
EM_GETTEXTMODE = WM_USER + 90;
{ for use with EM_GET/SETTEXTMODE }
TM_PLAINTEXT = 1;
TM_RICHTEXT = 2; { default behavior }
TM_SINGLELEVELUNDO = 4;
TM_MULTILEVELUNDO = 8; { default behavior }
TM_SINGLECODEPAGE = 16;
TM_MULTICODEPAGE = 32; { default behavior }
EM_AUTOURLDETECT = WM_USER + 91;
EM_GETAUTOURLDETECT = WM_USER + 92;
EM_SETPALETTE = WM_USER + 93;
EM_GETTEXTEX = WM_USER + 94;
EM_GETTEXTLENGTHEX = WM_USER + 95;
EM_SETLANGOPTIONS = WM_USER + 120;
EM_GETLANGOPTIONS = WM_USER + 121;
EM_GETIMECOMPMODE = WM_USER + 122;
{ Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS }
IMF_AUTOKEYBOARD = $0001;
IMF_AUTOFONT = $0002;
IMF_IMECANCELCOMPLETE = $0004; { high completes the comp string when aborting, low cancels. }
IMF_IMEALWAYSSENDNOTIFY = $0008;
{ New notifications }
EN_OLEOPFAILED = $0709;
EN_OBJECTPOSITIONS = $070A;
EN_LINK = $070B;
EN_DRAGDROPDONE = $070C;
{ Event notification masks }
ENM_SCROLLEVENTS = $00000008;
ENM_DRAGDROPDONE = $00000010;
ENM_LANGCHANGE = $01000000;
ENM_OBJECTPOSITIONS = $02000000;
ENM_LINK = $04000000;
{ New edit control styles }
ES_NOOLEDRAGDROP = $00000008;
const
CFM_LINK = $00000020; { Exchange hyperlink extension }
CFM_EFFECTS = CFM_BOLD or CFM_ITALIC or CFM_UNDERLINE or CFM_COLOR or
CFM_STRIKEOUT or CFE_PROTECTED or CFM_LINK;
CFM_ALL = CFM_EFFECTS or CFM_SIZE or CFM_FACE or CFM_OFFSET or CFM_CHARSET;
PFM_ALL = PFM_STARTINDENT or PFM_RIGHTINDENT or PFM_OFFSET or
PFM_ALIGNMENT or PFM_TABSTOPS or PFM_NUMBERING or PFM_OFFSETINDENT;
{ New masks and effects -- a parenthesized asterisk indicates that
the data is stored by RichEdit2.0, but not displayed }
CFM_SMALLCAPS = $0040; { (*) }
CFM_ALLCAPS = $0080; { (*) }
CFM_HIDDEN = $0100; { (*) }
CFM_OUTLINE = $0200; { (*) }
CFM_SHADOW = $0400; { (*) }
CFM_EMBOSS = $0800; { (*) }
CFM_IMPRINT = $1000; { (*) }
CFM_DISABLED = $2000;
CFM_REVISED = $4000;
CFM_BACKCOLOR = $04000000;
CFM_LCID = $02000000;
CFM_UNDERLINETYPE = $00800000; { (*) }
CFM_WEIGHT = $00400000;
CFM_SPACING = $00200000; { (*) }
CFM_KERNING = $00100000; { (*) }
CFM_STYLE = $00080000; { (*) }
CFM_ANIMATION = $00040000; { (*) }
CFM_REVAUTHOR = $00008000;
CFE_LINK = $00000020;
CFE_AUTOCOLOR = $40000000; { NOTE: this corresponds to CFM_COLOR, }
{ which controls it }
CFE_SUBSCRIPT = $00010000; { Superscript and subscript are }
CFE_SUPERSCRIPT = $00020000; { mutually exclusive }
CFM_SUBSCRIPT = CFE_SUBSCRIPT or CFE_SUPERSCRIPT;
CFM_SUPERSCRIPT = CFM_SUBSCRIPT;
CFM_EFFECTS2 = CFM_EFFECTS or CFM_DISABLED or CFM_SMALLCAPS or CFM_ALLCAPS or
CFM_HIDDEN or CFM_OUTLINE or CFM_SHADOW or CFM_EMBOSS or
CFM_IMPRINT or CFM_DISABLED or CFM_REVISED or
CFM_SUBSCRIPT or CFM_SUPERSCRIPT or CFM_BACKCOLOR;
CFM_ALL2 = CFM_ALL or CFM_EFFECTS2 or CFM_BACKCOLOR or CFM_LCID or
CFM_UNDERLINETYPE or CFM_WEIGHT or CFM_REVAUTHOR or
CFM_SPACING or CFM_KERNING or CFM_STYLE or CFM_ANIMATION;
CFE_SMALLCAPS = CFM_SMALLCAPS;
CFE_ALLCAPS = CFM_ALLCAPS;
CFE_HIDDEN = CFM_HIDDEN;
CFE_OUTLINE = CFM_OUTLINE;
CFE_SHADOW = CFM_SHADOW;
CFE_EMBOSS = CFM_EMBOSS;
CFE_IMPRINT = CFM_IMPRINT;
CFE_DISABLED = CFM_DISABLED;
CFE_REVISED = CFM_REVISED;
CFE_AUTOBACKCOLOR = CFM_BACKCOLOR;
{ Underline types }
CFU_CF1UNDERLINE = $FF; { map charformat's bit underline to CF2. }
CFU_INVERT = $FE; { For IME composition fake a selection. }
CFU_UNDERLINEDOTTED = $4; { (*) displayed as ordinary underline }
CFU_UNDERLINEDOUBLE = $3; { (*) displayed as ordinary underline }
CFU_UNDERLINEWORD = $2; { (*) displayed as ordinary underline }
CFU_UNDERLINE = $1;
CFU_UNDERLINENONE = 0;
{ PARAFORMAT 2.0 masks and effects }
const
PFM_SPACEBEFORE = $00000040;
PFM_SPACEAFTER = $00000080;
PFM_LINESPACING = $00000100;
PFM_STYLE = $00000400;
PFM_BORDER = $00000800; { (*) }
PFM_SHADING = $00001000; { (*) }
PFM_NUMBERINGSTYLE = $00002000; { (*) }
PFM_NUMBERINGTAB = $00004000; { (*) }
PFM_NUMBERINGSTART = $00008000; { (*) }
PFM_RTLPARA = $00010000;
PFM_KEEP = $00020000; { (*) }
PFM_KEEPNEXT = $00040000; { (*) }
PFM_PAGEBREAKBEFORE = $00080000; { (*) }
PFM_NOLINENUMBER = $00100000; { (*) }
PFM_NOWIDOWCONTROL = $00200000; { (*) }
PFM_DONOTHYPHEN = $00400000; { (*) }
PFM_SIDEBYSIDE = $00800000; { (*) }
PFM_TABLE = $C0000000; { (*) }
{ Note: PARAFORMAT has no effects }
PFM_EFFECTS = PFM_RTLPARA or PFM_KEEP or PFM_KEEPNEXT or PFM_TABLE or
PFM_PAGEBREAKBEFORE or PFM_NOLINENUMBER or
PFM_NOWIDOWCONTROL or PFM_DONOTHYPHEN or PFM_SIDEBYSIDE or PFM_TABLE;
PFM_ALL2 = PFM_ALL or PFM_EFFECTS or PFM_SPACEBEFORE or PFM_SPACEAFTER or
PFM_LINESPACING or PFM_STYLE or PFM_SHADING or PFM_BORDER or
PFM_NUMBERINGTAB or PFM_NUMBERINGSTART or PFM_NUMBERINGSTYLE;
PFE_RTLPARA = PFM_RTLPARA shr 16;
PFE_KEEP = PFM_KEEP shr 16; { (*) }
PFE_KEEPNEXT = PFM_KEEPNEXT shr 16; { (*) }
PFE_PAGEBREAKBEFORE = PFM_PAGEBREAKBEFORE shr 16; { (*) }
PFE_NOLINENUMBER = PFM_NOLINENUMBER shr 16; { (*) }
PFE_NOWIDOWCONTROL = PFM_NOWIDOWCONTROL shr 16; { (*) }
PFE_DONOTHYPHEN = PFM_DONOTHYPHEN shr 16; { (*) }
PFE_SIDEBYSIDE = PFM_SIDEBYSIDE shr 16; { (*) }
PFE_TABLEROW = $C000; { These 3 options are mutually }
PFE_TABLECELLEND = $8000; { exclusive and each imply }
PFE_TABLECELL = $4000; { that para is part of a table }
PFA_JUSTIFY = 4; { New paragraph-alignment option 2.0 (*) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -