📄 synedit.pas
字号:
procedure DblClick; override;
procedure DecPaintLock;
procedure DefineProperties(Filer: TFiler); override;
procedure DoChange; virtual;
procedure DragCanceled; override;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
function GetReadOnly: boolean; virtual;
procedure HighlighterAttrChanged(Sender: TObject);
procedure IncPaintLock;
procedure InitializeCaret;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure LinesChanged(Sender: TObject); virtual;
procedure ListCleared(Sender: TObject);
procedure ListDeleted(Sender: TObject; aIndex: integer; aCount: integer);
procedure ListInserted(Sender: TObject; Index: integer; aCount: integer);
procedure ListPutted(Sender: TObject; Index: integer; aCount: integer);
procedure ListBeforePutted(Sender: TObject; Index: integer; aCount: integer);
procedure ListBeforeDeleted(Sender: TObject; aIndex: integer; aCount: integer);
procedure ListBeforeInserted(Sender: TObject; Index: integer; aCount: integer);
//helper procs to chain list commands
procedure ChainListCleared(Sender: TObject);
procedure ChainListDeleted(Sender: TObject; aIndex: integer; aCount: integer);
procedure ChainListInserted(Sender: TObject; aIndex: integer; aCount: integer);
procedure ChainListPutted(Sender: TObject; aIndex: integer; aCount: integer);
procedure ChainLinesChanging(Sender: TObject);
procedure ChainLinesChanged(Sender: TObject);
procedure ChainUndoRedoAdded(Sender: TObject);
procedure ScanRanges;
procedure Loaded; override;
procedure MarkListChange(Sender: TObject);
{$IFDEF SYN_MBCSSUPPORT}
procedure MBCSGetSelRangeInLineWhenColumnSelectionMode(const s: string;
var ColFrom, ColTo: Integer);
{$ENDIF}
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
procedure NotifyHookedCommandHandlers(AfterProcessing: boolean;
var Command: TSynEditorCommand; var AChar: char; Data: pointer); virtual;
procedure Paint; override;
procedure PaintGutter(const AClip: TRect; const aFirstRow,
aLastRow: integer); virtual;
procedure PaintTextLines(AClip: TRect; const aFirstRow, aLastRow,
FirstCol, LastCol: integer); virtual;
procedure RecalcCharExtent;
procedure RedoItem;
procedure InternalSetCaretXY(const Value: TBufferCoord); virtual;
procedure SetCaretXY(const Value: TBufferCoord); virtual;
procedure SetCaretXYEx(CallEnsureCursorPos: Boolean; Value: TBufferCoord); virtual;
procedure SetName(const Value: TComponentName); override;
procedure SetReadOnly(Value: boolean); virtual;
procedure SetWantReturns(Value: Boolean);
procedure SetSelTextPrimitive(const aValue: String);
procedure SetSelTextPrimitiveEx(PasteMode: TSynSelectionMode; Value: PChar;
AddToUndoList: Boolean);
procedure SetWantTabs(Value: Boolean);
procedure StatusChanged(AChanges: TSynStatusChanges);
// If the translations requires Data, memory will be allocated for it via a
// GetMem call. The client must call FreeMem on Data if it is not NIL.
function TranslateKeyCode(Code: word; Shift: TShiftState;
var Data: pointer): TSynEditorCommand;
procedure UndoItem;
procedure UpdateMouseCursor; virtual;
protected
fGutterWidth: Integer;
fInternalImage: TSynInternalImage;
procedure HideCaret;
procedure ShowCaret;
procedure DoOnClearBookmark(var Mark: TSynEditMark); virtual;
procedure DoOnCommandProcessed(Command: TSynEditorCommand; AChar: char;
Data: pointer); virtual;
// no method DoOnDropFiles, intercept the WM_DROPFILES instead
procedure DoOnGutterClick(Button: TMouseButton; X, Y: integer); virtual;
procedure DoOnPaint; virtual;
procedure DoOnPaintTransientEx(TransientType: TTransientType; Lock: Boolean); virtual;
procedure DoOnPaintTransient(TransientType: TTransientType); virtual;
procedure DoOnPlaceMark(var Mark: TSynEditMark); virtual;
procedure DoOnProcessCommand(var Command: TSynEditorCommand;
var AChar: char; Data: pointer); virtual;
function DoOnReplaceText(const ASearch, AReplace: string;
Line, Column: integer): TSynReplaceAction; virtual;
function DoOnSpecialLineColors(Line: integer;
var Foreground, Background: TColor): boolean; virtual;
procedure DoOnStatusChange(Changes: TSynStatusChanges); virtual;
function GetSelEnd: integer;
function GetSelStart: integer;
function GetSelLength: integer;
procedure SetSelEnd(const Value: integer);
procedure SetSelStart(const Value: integer);
procedure SetSelLength(const Value: integer);
procedure SetAlwaysShowCaret(const Value: Boolean);
procedure PrepareIdentChars(var IdentChars, WhiteChars: TSynIdentChars);
procedure LinesHookChanged;
property InternalCaretX: Integer write InternalSetCaretX;
property InternalCaretY: Integer write InternalSetCaretY;
property InternalCaretXY: TBufferCoord write InternalSetCaretXY;
public
(* public中的自定义过程放置于此,便于修改 *)
// get First Free Bookmark number
function GetFirstFreeBookMark: Integer;
procedure SetHorizontalScrollBarPos(ScrollCode : TScrollCode; Pos: Smallint);
procedure SetVerticalScrollBarPos(ScrollCode : TScrollCode; Pos: Smallint);
procedure SetLineColor(Line : Integer; ForeColor, BackColor : TColor);
procedure SetLineColorToDefault(Line : Integer);
(* END *)
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Canvas;
property SelStart: Integer read GetSelStart write SetSelStart;
property SelEnd: Integer read GetSelEnd write SetSelEnd;
property AlwaysShowCaret: Boolean read FAlwaysShowCaret
write SetAlwaysShowCaret;
procedure UpdateCaret;
function CaretInView: Boolean;
{$IFDEF SYN_COMPILER_4_UP}
procedure AddKey(Command: TSynEditorCommand; Key1: word; SS1: TShiftState;
Key2: word = 0; SS2: TShiftState = []);
{$ELSE}
procedure AddKey(Command: TSynEditorCommand; Key1: word; SS1: TShiftState;
Key2: word; SS2: TShiftState);
{$ENDIF}
procedure BeginUndoBlock;
procedure BeginUpdate;
function CharIndexToRowCol(Index: integer): TBufferCoord;
procedure Clear;
procedure ClearAll;
procedure ClearBookMark(BookMark: Integer);
procedure ClearSelection;
procedure CommandProcessor(Command: TSynEditorCommand; AChar: char;
Data: pointer); virtual;
procedure ClearUndo;
procedure CopyToClipboard;
procedure CutToClipboard;
procedure DoCopyToClipboard(const SText: string);
procedure DragDrop(Source: TObject; X, Y: Integer); override;
procedure EndUndoBlock;
procedure EndUpdate;
procedure EnsureCursorPosVisible;
procedure EnsureCursorPosVisibleEx(ForceToMiddle: Boolean);
procedure FindMatchingBracket; virtual;
function GetMatchingBracket: TBufferCoord; virtual;
function GetMatchingBracketEx(const APoint: TBufferCoord): TBufferCoord; virtual;
{$IFDEF SYN_COMPILER_4_UP}
function ExecuteAction(Action: TBasicAction): boolean; override;
{$ENDIF}
procedure ExecuteCommand(Command: TSynEditorCommand; AChar: char;
Data: pointer); virtual;
function GetBookMark(BookMark: integer; var X, Y: integer): boolean;
function GetHighlighterAttriAtRowCol(const XY: TBufferCoord; var Token: string;
var Attri: TSynHighlighterAttributes): boolean;
function GetHighlighterAttriAtRowColEx(const XY: TBufferCoord; var Token: string;
var TokenType, Start: Integer;
var Attri: TSynHighlighterAttributes): boolean;
function GetPositionOfMouse(out aPos: TBufferCoord): Boolean;
function GetWordAtRowCol(const XY: TBufferCoord): string;
procedure GotoBookMark(BookMark: Integer);
procedure GotoLineAndCenter(ALine: Integer);
function IdentChars: TSynIdentChars;
procedure InvalidateGutter;
procedure InvalidateGutterRows(FirstRow, LastRow: integer);
procedure InvalidateGutterLine(aLine: integer);
procedure InvalidateGutterLines(FirstLine, LastLine: integer);
procedure InvalidateLine(Line: integer);
procedure InvalidateLines(FirstLine, LastLine: integer);
procedure InvalidateSelection;
function IsBookmark(BookMark: integer): boolean;
function IsPointInSelection(const Value: TBufferCoord): boolean;
procedure LockUndo;
function BufferToDisplayPos(const p: TBufferCoord): TDisplayCoord;
function DisplayToBufferPos(const p: TDisplayCoord): TBufferCoord;
function LineToRow(aLine: integer): integer;
function RowToLine(aRow: integer): integer;
function NextWordPos: TBufferCoord; virtual;
function NextWordPosEx(const XY: TBufferCoord): TBufferCoord; virtual;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure PasteFromClipboard;
function WordStart: TBufferCoord; virtual;
function WordStartEx(const XY: TBufferCoord): TBufferCoord; virtual;
function WordEnd: TBufferCoord; virtual;
function WordEndEx(const XY: TBufferCoord): TBufferCoord; virtual;
function PrevWordPos: TBufferCoord; virtual;
function PrevWordPosEx(const XY: TBufferCoord): TBufferCoord; virtual;
function PixelsToRowColumn(aX, aY: integer): TDisplayCoord;
function PixelsToNearestRowColumn(aX, aY: integer): TDisplayCoord;
procedure Redo;
procedure RegisterCommandHandler(const AHandlerProc: THookedCommandEvent;
AHandlerData: pointer);
function RowColumnToPixels(const RowCol: TDisplayCoord): TPoint;
function RowColToCharIndex(RowCol: TBufferCoord): integer;
function SearchReplace(const ASearch, AReplace: string;
AOptions: TSynSearchOptions): integer;
procedure SelectAll;
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
procedure SetCaretAndSelection(const ptCaret, ptBefore, ptAfter: TBufferCoord);
procedure SetDefaultKeystrokes; virtual;
procedure SetSelWord;
procedure SetWordBlock(Value: TBufferCoord);
procedure Undo;
procedure UnlockUndo;
procedure UnregisterCommandHandler(AHandlerProc: THookedCommandEvent);
{$IFDEF SYN_COMPILER_4_UP}
function UpdateAction(Action: TBasicAction): boolean; override;
{$ENDIF}
procedure SetFocus; override;
procedure AddKeyUpHandler (aHandler : TKeyEvent);
procedure RemoveKeyUpHandler (aHandler : TKeyEvent);
procedure AddKeyDownHandler (aHandler : TKeyEvent);
procedure RemoveKeyDownHandler (aHandler : TKeyEvent);
procedure AddKeyPressHandler (aHandler : TKeyPressEvent);
procedure RemoveKeyPressHandler (aHandler : TKeyPressEvent);
procedure AddFocusControl (aControl: TWinControl);
procedure RemoveFocusControl (aControl: TWinControl);
procedure AddMouseDownHandler(aHandler: TMouseEvent);
procedure RemoveMouseDownHandler(aHandler: TMouseEvent);
procedure AddMouseUpHandler(aHandler: TMouseEvent);
procedure RemoveMouseUpHandler(aHandler: TMouseEvent);
procedure AddMouseCursorHandler(aHandler: TMouseCursorEvent);
procedure RemoveMouseCursorHandler(aHandler: TMouseCursorEvent);
{$IFDEF SYN_CLX}
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; override;
{$ELSE}
procedure WndProc(var Msg: TMessage); override;
{$ENDIF}
procedure SetLinesPointer(ASynEdit: TCustomSynEdit);
procedure RemoveLinesPointer;
procedure HookTextBuffer(aBuffer: TSynEditStringList;
aUndo, aRedo: TSynEditUndoList);
procedure UnHookTextBuffer;
{$IFDEF CODEFOLDING}
//### Code Folding ###
function GetUncollapsedStrings: TStrings;
procedure CollapseAll;
procedure CollapseCurrent;
procedure CollapseLevel(ALevel: Integer);
procedure InitCodeFolding;
procedure ReScanForFoldRanges;
procedure UpdateFoldRanges(CurrentLine, LineCount: Integer);
procedure UncollapseAll;
procedure UncollapseLevel(ALevel: Integer; NeedInvalidate: Boolean = True);
function GetRealLineNumber(aLine: Integer): Integer;
//### End Code Folding ###
{$ENDIF}
public
{$IFDEF CODEFOLDING}
//### Code Folding ###
property CodeFolding: TSynCodeFolding read fCodeFolding write setCodeFolding;
//### End Code Folding ###
{$ENDIF}
(* 增加的属性放置于此,便于修改 *)
property ActiveLine: TSynActiveLine read fActiveLine write SetActiveLine;
property LineDivider: TSynLineDivider read fLineDivider write SetLineDivider;
property RightEdge: TSynRightEdge read fRightEdge write SetRightEdge;
property Background: TSynEditBackground read fBackground write SetBackground;
property LineSpacing: Integer read FLineSpacing write SetLineSpacing;
property LineSpacingRule: TLineSpacingRule read FLineSpacingRule write SetLineSpacingRule;
property BlockWidth : Integer read FBlockWidth write fBlockWidth default 2;
property ExpandLines: TSynEditStringList read getExpandLines write SetExpandLines;
property ScrollBars : TSynScrollBars read fScrollBars write SetScrollBars;
property UnicodeFontName : TFontName read GetUnicodeFontName write SetUnicodeFontName;
(* end *)
property BlockBegin: TBufferCoord read GetBlockBegin write SetBlockBegin;
property BlockEnd: TBufferCoord read GetBlockEnd write SetBlockEnd;
property CanPaste: Boolean read GetCanPaste;
property CanRedo: boolean read GetCanRedo;
property CanUndo: boolean read GetCanUndo;
property CaretX: Integer read fCaretX write SetCaretX;
property CaretY: Integer read fCaretY write SetCaretY;
property CaretXY: TBufferCoord read GetCaretXY write SetCaretXY;
property DisplayX: Integer read GetDisplayX;
property DisplayY: Integer read GetDisplayY;
property DisplayXY: TDisplayCoord read GetDisplayXY;
property DisplayLineCount: integer read GetDisplayLineCount;
property CharsInWindow: Integer read fCharsInWindow;
property CharWidth: integer read fCharWidth;
property Color;
property Font: TFont read GetFont write SetFont;
property Highlighter: TSynCustomHighlighter
read fHighlighter write SetHighlighter;
property LeftChar: Integer read fLeftChar write SetLeftChar;
property LineHeight: integer read GetLineHeight;
property LinesInWindow: Integer read fLinesInWindow;
property LineText: string read GetLineText write SetLineText;
property Lines: TStrings read fLines write SetLines;
property Marks: TSynEditMarkList read fMarkList;
property MaxScrollWidth: integer read fMaxScrollWidth write SetMaxScrollWidth
default 1024;
property Modified: Boolean read fModified write SetModified;
property PaintLock: Integer read fPaintLock;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default FALSE;
property SearchEngine: TSynEditSearchCustom read fSearchEngine write SetSearchEngine;
property SelAvail: Boolean read GetSelAvail;
property SelLength: integer read GetSelLength write SetSelLength;
property SelTabBlock: Boolean read GetSelTabBlock;
property SelTabLine: Boolean read GetSelTabLine;
property SelText: string read GetSelText write SetSelTextExternal;
property StateFlags: TSynStateFlags read fStateFlags;
property Text: string read SynGetText write SynSetText;
property TopLine: Integer read fTopLine write SetTopLine;
property WordAtCursor: string read GetWordAtCursor;
property WordAtMouse: string read GetWordAtMouse;
property UndoList: TSynEditUndoList read fUndoList;
property RedoList: TSynEditUndoList read fRedoList;
public
property OnProcessCommand: TProcessCommandEvent
read FOnProcessCommand write FOnProcessCommand;
property BookMarkOptions: TSynBookMarkOpt
read fBookMarkOpt write SetBookMarkOpt;
property BorderStyle: TSynBorderStyle read FBorderStyle write SetBorderStyle
default bsSingle;
property Gutter: TSynGutter read fGutter write SetGutter;
property HideSelection: boolean read fHideSelection write SetHideSelection
default false;
property InsertCaret: TSynEditCaretType read FInsertCaret
write SetInsertCaret default ctVerticalLine;
property InsertMode: boolean read fInserting write SetInsertMode
default true;
property IsScrolling : Boolean read FIsScrolling;
property Keystrokes: TSynEditKeyStrokes
read FKeystrokes write SetKeystrokes stored False;
property MaxUndo: Integer read GetMaxUndo write SetMaxUndo default 1024;
property Options: TSynEditorOptions read GetOptions write SetOptions
default SYNEDIT_DEFAULT_OPTIONS;
property OverwriteCaret: TSynEditCaretType read FOverwriteCaret
write SetOverwriteCaret default ctBlock;
property SelectedColor: TSynSelectedColor
read FSelectedColor write SetSelectedColor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -