📄 synedit.pas
字号:
procedure WMVScroll(var Msg: TWMScroll); message WM_VSCROLL;
{$ENDIF}
{$IFNDEF SYN_COMPILER_6_UP}
procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;
{$ENDIF}
private
{$IFDEF CODEFOLDING}
//### Code Folding ###
fNeedToReScan : integer;
fSavedKeyword : string;
fAllFoldRanges: TSynEditAllFoldRanges;
fAllFoldRangesCopy : TSynEditAllFoldRanges;
fLinesCopy: TStrings;
fHighlightedFoldRange: TSynEditFoldRange;
fHint: TObject;
fCodeFolding: TSynCodeFolding;
fCodeFoldingPlugin: TSynEditCodeFoldingPlugin;
//### End Code Folding ###
{$ENDIF}
(* private中的自定义变量放置于此,便于修改
fRighEdge 右边装订线属性
fLineDivider 行分隔线属性
fActiveLine 高亮行属性
fWordWrap 换行巳属性
FLineSpacing 行间距数值
FLineSpacingRule 行间距类型
fLastDisplayY 保存刷新前的显示坐标
fBlockWidth 缩进块的大小
fScrollBarsStyle 滚动条类型
fIsFlatSB 当前是否是平面滚动条 *)
FBufferBmp : Graphics.TBitmap;
FBackground : TSynEditBackground;
FLineSpacing: Integer;
FLineSpacingRule: TLineSpacingRule;
fRightEdge : TSynRightEdge;
fRightEdgeMoving : boolean;
fMoveRightEdgePosition : integer;
fMoveRightEdgeBitmap : Graphics.TBitmap;
fLineDivider : TSynLineDivider;
fActiveLine : TSynActiveLine;
fWordWrap : TSynWordWrap;
fLastDisplayY : Integer;
fBlockWidth : Integer;
fScrollBars : TSynScrollBars;
fIsFlatSB : Boolean;
FSaveSelectionMode: TSynSelectionMode;
FAltEnabled : Boolean;
fGutterCharWidth : integer;
(* end *)
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;
fTextHeight: Integer;
fTextOffset: Integer;
fTopLine: Integer;
fHighlighter: TSynCustomHighlighter;
fSelectedColor: TSynSelectedColor;
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;
fSelectionMode: TSynSelectionMode;
fWantReturns: boolean;
fWantTabs: boolean;
fWordWrapPlugin: ISynEditBufferPlugin;
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 LINUX}
FDeadKeysFixed: Boolean;
{$ENDIF}
{$IFDEF SYN_CLX}
FHScrollBar : TSynEditScrollBar;
FVScrollBar : TSynEditScrollBar;
procedure ScrollEvent(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
{$ENDIF}
{$IFDEF CODEFOLDING}
//### Code Folding ###
function FoldRangeForLine(Line: Integer): TSynEditFoldRange;
function CollapsableFoldRangeForLine(Line: Integer;
FoldCount: PInteger = nil): TSynEditFoldRange;
function FoldRangeForLineTo(Line: Integer): TSynEditFoldRange;
function GetLineIndent(Strings: TStrings; ALine: Integer): Integer;
function GetLineIndentChars(Strings: TStrings; ALine: Integer): Integer; //###mod IndentGuides calculation fix
function TreeEndForLine(Line: Integer): Boolean;
function TreeLineForLine(Line: Integer): Boolean;
procedure Collapse(AFoldRange: TSynEditFoldRange);
procedure MoveFoldRangesAfter(FoldRange: TSynEditFoldRange;
LineCount: Integer);
procedure ScanForFoldRanges(var TopFoldRanges: TSynEditAllFoldRanges;
Strings: TStrings);
procedure Uncollapse(FoldRange: TSynEditFoldRange);
procedure UpdateFoldRangesEx(FoldRanges: TSynEditFoldRanges;
LineCount: Integer);
procedure UpdateFoldRangeParents;
procedure CheckIfAtMatchingKeywords;
function IsKeywordAtCursorPos(OpenKeyWord: PBoolean = nil): Boolean;
function IsKeywordAtText(Text : string; var Keyword : string): Boolean;
function GetAutoSizeDigitCount: Integer;
function CanExecuteInLine(aLine: Integer; aKey: Word = 0): Boolean;
function GetCollapseMarkRect(FoldRange: TSynEditFoldRange;
Row: Integer): TRect;
procedure setCodeFolding(value: TSynCodeFolding);
procedure CodeFoldingOnChange(Event: TSynCodeFoldingChanges);
//### End Code Folding ###
{$ENDIF}
(* private中的自定义过程放置于此,便于修改 *)
function ExtraLineSpacing : integer;
procedure SetLineSpacing(const Value: Integer);
procedure SetLineSpacingRule(const Value: TLineSpacingRule);
procedure SetActiveLine(const Value: TSynActiveLine);
procedure SetLineDivider(const Value: TSynLineDivider);
procedure SetRightEdge(const Value: TSynRightEdge);
procedure SetWordWrap(const Value: TSynWordWrap);
procedure ActiveLineChanged(Sender: TObject);
procedure LineDividerChanged(Sender: TObject);
procedure RightEdgeChanged(Sender: TObject);
procedure WordWrapChanged(Sender: TObject);
procedure BackgroundChanged(Sender: TObject);
function GetWrapAtColumn : integer;
function GetLineHeight: integer;
function getExpandLines: TSynEditStringList;
procedure SetExpandLines(const Value: TSynEditStringList);
procedure ScrollBarChanged(Sender: TObject);
procedure SetScrollBars(const Value: TSynScrollBars);
procedure SetBackground(const Value: TSynEditBackground);
function GetUnicodeFontName: TFontName;
procedure SetUnicodeFontName(value : TFontName);
(* end *)
procedure SetSelectedColor(const Value: TSynSelectedColor);
procedure SetBookMarkOpt(const Value: TSynBookMarkOpt);
procedure BookMarkOptionsChanged(Sender: TObject);
procedure ComputeCaret(X, Y: Integer);
procedure ComputeScroll(X, Y: Integer);
procedure DoBlockIndent;
procedure DoBlockUnindent;
procedure DoHomeKey(Selection:boolean);
procedure DoEndKey(Selection: 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 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 SetSearchEngine(Value: TSynEditSearchCustom);
procedure SetSelectionMode(const Value: TSynSelectionMode);
procedure SetSelText(const Value: string);
procedure SetSelTextExternal(const Value: string);
procedure SetTabWidth(Value: integer);
procedure SynSetText(const Value: string);
procedure SetTopLine(Value: Integer);
procedure UpdateWordWrap(const Value: boolean);
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
(* protected中的自定义过程放置于此,便于修改 *)
//修改 画出用鼠标移动右边线时的状态
procedure DrawRightEdgeMove(NewPosition, oldPosition : integer); virtual;
function SB_GetScrollInfo(hWnd : HWND; BarFlag : integer; var ScrollInfo : TScrollInfo) : Bool;
function SB_SetScrollInfo(hWnd : HWND; BarFlag : integer; const ScrollInfo : TScrollInfo; Redraw : Bool) : integer; stdcall;
function SB_ShowScrollBar(hWnd: HWND; wBar: Integer; bShow: BOOL): BOOL;
function SB_EnableScrollBar(hWnd: HWND; wSBflags, wArrows: UINT): BOOL;
Procedure HighLighterChanged; virtual;
(* END *)
{$IFDEF SYN_COMPILER_6_UP}
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; override;
{$ENDIF}
{$IFDEF SYN_CLX}
procedure Resize; override;
function GetClientOrigin: TPoint; override;
function GetClientRect: TRect; override;
function WidgetFlags: integer; 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}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -