📄 synedit.pas
字号:
{$ENDIF}
private
fAlwaysShowCaret: Boolean;
fBlockBegin: TBufferCoord;
fBlockEnd: TBufferCoord;
fCaretX: Integer;
fLastCaretX: integer;
fCaretY: Integer;
fCharsInWindow: Integer;
fCharWidth: Integer;
fFontDummy: TFont;
{$IFDEF SYN_MBCSSUPPORT}
fImeCount: Integer;
fMBCSStepAside: Boolean;
{$ENDIF}
fInserting: Boolean;
fLines: TStrings;
fOrigLines : TStrings;
fOrigUndoList: TSynEditUndoList;
fOrigRedoList: TSynEditUndoList;
fLinesInWindow: Integer;
fLeftChar: Integer;
fMaxScrollWidth: Integer;
fPaintLock: Integer;
fReadOnly: Boolean;
fRightEdge: Integer;
fRightEdgeColor: TColor;
fScrollHintColor: TColor;
fScrollHintFormat: TScrollHintFormat;
FScrollBars: TScrollStyle;
fTextHeight: Integer;
fTextOffset: Integer;
fTopLine: Integer;
fHighlighter: TSynCustomHighlighter;
fSelectedColor: TSynSelectedColor;
fActiveLineColor: TColor;
fUndoList: TSynEditUndoList;
fRedoList: TSynEditUndoList;
fBookMarks: array[0..9] of TSynEditMark;
fMouseDownX: integer;
fMouseDownY: integer;
fBookMarkOpt: TSynBookMarkOpt;
fBorderStyle: TSynBorderStyle;
fHideSelection: boolean;
fMouseWheelAccumulator: integer;
fOverwriteCaret: TSynEditCaretType;
fInsertCaret: TSynEditCaretType;
fCaretOffset: TPoint;
fKeyStrokes: TSynEditKeyStrokes;
fModified: Boolean;
fMarkList: TSynEditMarkList;
fExtraLineSpacing: integer;
fSelectionMode: TSynSelectionMode;
fActiveSelectionMode: TSynSelectionMode; //mode of the active selection
fWantReturns: boolean;
fWantTabs: boolean;
fWordWrapPlugin: ISynEditBufferPlugin;
fWordWrapGlyph: TSynGlyph;
fCaretAtEOL: boolean; // used by wordwrap
fGutter: TSynGutter;
fTabWidth: integer;
fTextDrawer: TheTextDrawer;
fInvalidateRect: TRect;
fStateFlags: TSynStateFlags;
fOptions: TSynEditorOptions;
fStatusChanges: TSynStatusChanges;
fLastKey: word;
fLastShiftState: TShiftState;
fSearchEngine: TSynEditSearchCustom;
fHookedCommandHandlers: TList;
fKbdHandler: TSynEditKbdHandler;
fFocusList: TList;
fPlugins: TList;
fScrollTimer: TTimer;
fScrollDeltaX, fScrollDeltaY: Integer;
// event handlers
fOnChange: TNotifyEvent;
fOnClearMark: TPlaceMarkEvent;
fOnCommandProcessed: TProcessCommandEvent;
fOnDropFiles: TDropFilesEvent;
fOnGutterClick: TGutterClickEvent;
fOnMouseCursor: TMouseCursorEvent;
fOnPaint: TPaintEvent;
fOnPlaceMark: TPlaceMarkEvent;
fOnProcessCommand: TProcessCommandEvent;
fOnProcessUserCommand: TProcessCommandEvent;
fOnReplaceText: TReplaceTextEvent;
fOnSpecialLineColors: TSpecialLineColorsEvent;
fOnContextHelp: TContextHelpEvent;
fOnPaintTransient: TPaintTransient;
fOnScroll: TScrollEvent;
fOnGutterGetText: TGutterGetTextEvent;
fOnGutterPaint: TGutterPaintEvent;
fOnStatusChange: TStatusChangeEvent;
fShowSpecChar: Boolean;
FPaintTransientLock: Integer;
FIsScrolling: Boolean;
fChainListCleared: TNotifyEvent;
fChainListDeleted: TStringListChangeEvent;
fChainListInserted: TStringListChangeEvent;
fChainListPutted: TStringListChangeEvent;
fChainLinesChanging: TNotifyEvent;
fChainLinesChanged: TNotifyEvent;
fChainedEditor: TCustomSynEdit;
fChainUndoAdded: TNotifyEvent;
fChainRedoAdded: TNotifyEvent;
{$IFDEF SYN_LINUX}
FDeadKeysFixed: Boolean;
{$ENDIF}
{$IFDEF SYN_CLX}
FHScrollBar : TSynEditScrollBar;
FVScrollBar : TSynEditScrollBar;
procedure ScrollEvent(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
{$ENDIF}
procedure BookMarkOptionsChanged(Sender: TObject);
procedure ComputeCaret(X, Y: Integer);
procedure ComputeScroll(X, Y: Integer);
procedure DoBlockIndent;
procedure DoBlockUnindent;
procedure DoHomeKey(Selection:boolean);
procedure DoEndKey(aSelection: Boolean);
procedure DoLinesDeleted(FirstLine, Count: integer);
procedure DoLinesInserted(FirstLine, Count: integer);
procedure DoShiftTabKey;
procedure DoTabKey;
procedure DoCaseChange(const Cmd : TSynEditorCommand);
function FindHookedCmdEvent(AHandlerProc: THookedCommandEvent): integer;
procedure SynFontChanged(Sender: TObject);
function GetBlockBegin: TBufferCoord;
function GetBlockEnd: TBufferCoord;
function GetCanPaste: Boolean;
function GetCanRedo: Boolean;
function GetCanUndo: Boolean;
function GetCaretXY: TBufferCoord;
function GetDisplayX: Integer;
function GetDisplayY: Integer;
function GetDisplayXY: TDisplayCoord;
function GetDisplayLineCount: integer;
function GetFont: TFont;
function GetHookedCommandHandlersCount: integer;
function GetLineText: string;
function GetMaxUndo: Integer;
function GetOptions: TSynEditorOptions;
function GetSelAvail: Boolean;
function GetSelTabBlock: Boolean;
function GetSelTabLine: Boolean;
function GetSelText: string;
function SynGetText: string;
function GetWordAtCursor : string;
function GetWordAtMouse: string;
function GetWordWrap: boolean;
procedure GutterChanged(Sender: TObject);
procedure InsertBlock(const BB, BE: TBufferCoord; ChangeStr: PChar; AddToUndoList: Boolean);
function LeftSpaces(const Line: string): Integer;
function LeftSpacesEx(const Line: string; WantTabs: Boolean): Integer;
function GetLeftSpacing(CharCount: Integer; WantTabs: Boolean): String;
procedure LinesChanging(Sender: TObject);
procedure MoveCaretAndSelection(const ptBefore, ptAfter: TBufferCoord;
SelectionCommand: boolean);
procedure MoveCaretHorz(DX: integer; SelectionCommand: boolean);
procedure MoveCaretVert(DY: integer; SelectionCommand: boolean);
procedure PluginsAfterPaint(ACanvas: TCanvas; const AClip: TRect;
FirstLine, LastLine: integer);
procedure ReadAddedKeystrokes(Reader: TReader);
procedure ReadRemovedKeystrokes(Reader: TReader);
function ScanFrom(Index: integer): integer;
procedure ScrollTimerHandler(Sender: TObject);
procedure SelectedColorsChanged(Sender: TObject);
procedure SetBlockBegin(Value: TBufferCoord);
procedure SetBlockEnd(Value: TBufferCoord);
procedure SetBorderStyle(Value: TSynBorderStyle);
procedure SetCaretX(Value: Integer);
procedure SetCaretY(Value: Integer);
procedure InternalSetCaretX(Value: Integer);
procedure InternalSetCaretY(Value: Integer);
procedure SetInternalDisplayXY(const aPos: TDisplayCoord);
procedure SetActiveLineColor(Value: TColor);
procedure SetExtraLineSpacing(const Value: integer);
procedure SetFont(const Value: TFont);
procedure SetGutter(const Value: TSynGutter);
procedure SetGutterWidth(Value: Integer);
procedure SetHideSelection(const Value: boolean);
procedure SetHighlighter(const Value: TSynCustomHighlighter);
procedure SetInsertCaret(const Value: TSynEditCaretType);
procedure SetInsertMode(const Value: boolean);
procedure SetKeystrokes(const Value: TSynEditKeyStrokes);
procedure SetLeftChar(Value: Integer);
procedure SetLines(Value: TStrings);
procedure SetLineText(Value: string);
procedure SetMaxScrollWidth(Value: integer);
procedure SetMaxUndo(const Value: Integer);
procedure SetModified(Value: boolean);
procedure SetOptions(Value: TSynEditorOptions);
procedure SetOverwriteCaret(const Value: TSynEditCaretType);
procedure SetRightEdge(Value: Integer);
procedure SetRightEdgeColor(Value: TColor);
procedure SetScrollBars(const Value: TScrollStyle);
procedure SetSearchEngine(Value: TSynEditSearchCustom);
procedure SetSelectionMode(const Value: TSynSelectionMode);
procedure SetActiveSelectionMode(const Value: TSynSelectionMode);
procedure SetSelTextExternal(const Value: string);
procedure SetTabWidth(Value: integer);
procedure SynSetText(const Value: string);
procedure SetTopLine(Value: Integer);
procedure SetWordBlock(Value: TBufferCoord);
procedure SetWordWrap(const Value: boolean);
procedure SetWordWrapGlyph(const Value: TSynGlyph);
procedure WordWrapGlyphChange(Sender: TObject);
procedure SizeOrFontChanged(bFont: boolean);
procedure ProperSetLine(ALine: integer; const ALineText: string);
procedure UpdateModifiedStatus;
procedure UndoRedoAdded(Sender: TObject);
procedure UpdateLastCaretX;
procedure UpdateScrollBars;
procedure WriteAddedKeystrokes(Writer: TWriter);
procedure WriteRemovedKeystrokes(Writer: TWriter);
protected
{$IFDEF SYN_CLX}
procedure Resize; override;
function GetClientOrigin: TPoint; override;
function GetClientRect: TRect; override;
function WidgetFlags: integer; override;
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
const MousePos: TPoint): Boolean; override;
function NeedKey(Key: Integer; Shift: TShiftState;
const KeyText: WideString): Boolean; override;
{$ELSE}
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure InvalidateRect(const aRect: TRect; aErase: boolean); virtual;
{$ENDIF}
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);
//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
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;
{$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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -