synedit.pas
来自「一个mwEdit控件原码,比mwCuuEdit0.92a功能先进.」· PAS 代码 · 共 1,671 行 · 第 1/5 页
PAS
1,671 行
property Editor: TCustomSynEdit read fOwner; //mh 2000-11-10
public
constructor Create(AOwner: TCustomSynEdit);
destructor Destroy; override;
end;
TCustomSynEdit = class(TCustomControl)
private
{$IFDEF SYN_CLX}
{$ELSE}
procedure WMCancelMode(var Message: TMessage); message WM_CANCELMODE; //ddh 2001-12-13
procedure WMCaptureChanged(var Msg: TMessage); message WM_CAPTURECHANGED; //jr 2001-01-06
procedure WMClear(var Msg: TMessage); message WM_CLEAR;
procedure WMCopy(var Message: TMessage); message WM_COPY; //pp 2001-08-28
procedure WMCut(var Message: TMessage); message WM_CUT; //pp 2001-08-28
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
procedure WMEraseBkgnd(var Msg: TMessage); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMGetText(var Msg: TWMGetText); message WM_GETTEXT;
procedure WMGetTextLength(var Msg: TWMGetTextLength); message WM_GETTEXTLENGTH;
procedure WMHScroll(var Msg: TWMScroll); message WM_HSCROLL;
procedure WMPaste(var Message: TMessage); message WM_PASTE; //pp 2001-08-28
procedure WMSetText(var Msg: TWMSetText); message WM_SETTEXT;
{$IFDEF SYN_MBCSSUPPORT}
procedure WMImeComposition(var Msg: TMessage); message WM_IME_COMPOSITION;
procedure WMImeNotify(var Msg: TMessage); message WM_IME_NOTIFY;
{$ENDIF}
procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS;
procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure WMUndo(var Msg: TMessage); message WM_UNDO;
procedure WMVScroll(var Msg: TWMScroll); message WM_VSCROLL;
{$ENDIF}
private
fAlwaysShowCaret: Boolean;
fBlockBegin: TBufferCoord;
fBlockEnd: TBufferCoord;
fCaretX: Integer;
fLastCaretX: integer; //mh 2000-10-19
fCaretY: Integer;
fCharsInWindow: Integer;
fCharWidth: Integer;
fFontDummy: TFont;
{$IFDEF SYN_MBCSSUPPORT}
fImeCount: Integer;
fMBCSStepAside: Boolean;
{$ENDIF}
fInserting: Boolean;
fLines: TStrings;
fOrigLines : TStrings; //ddh 2002-7-15
fOrigUndoList: TSynEditUndoList; //ddh 2002-7-15
fOrigRedoList: TSynEditUndoList; //ddh 2002-7-15
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;
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; //GBN 2001-10-23
fOnScroll: TScrollEvent; //GBN 2002-05-14
fOnLineNumber: TLineNumberEvent; //GBN 2002-05-14
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}
FClxLineEditPaintCount: Integer;
{$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); //home key enhancement
procedure DoLinesDeleted(FirstLine, Count: integer);
procedure DoLinesInserted(FirstLine, Count: integer);
procedure DoShiftTabKey; //shift-tab key handling
procedure DoTabKey;
procedure DoCaseChange(const Cmd : TSynEditorCommand); //DDH 2002-02-11
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 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);
procedure InsertBlockEx(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 SetSelText(const Value: string);
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; //mr.maX 2003-05-22
procedure UndoRedoAdded(Sender: TObject);
procedure UpdateLastCaretX; //jr 2002-04-26
procedure UpdateScrollBars;
procedure WriteAddedKeystrokes(Writer: TWriter);
procedure WriteRemovedKeystrokes(Writer: TWriter);
protected
{$IFDEF SYN_CLX}
procedure CreateWidget; override;
procedure Painting(Sender: QObjectH; EventRegion: QRegionH); override;
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 DragCanceled; override;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
// procedure FindMatchingBracket; virtual; //GBN 2001-10-23 Moved to public
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 ListScanRanges(Sender: TObject);
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; //sbs 2000-11-19
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 SetSelTextPrimitive(PasteMode: TSynSelectionMode; Value: PChar);
procedure SetSelTextPrimitiveEx(PasteMode: TSynSelectionMode; Value: PChar;
AddToUndoList: 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; //sbs 2000-11-19
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?