⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synedit.pas

📁 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -