mwcustomedit.pas
来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,920 行 · 第 1/5 页
PAS
1,920 行
fReadOnly: Boolean;
fRightEdge: Integer;
fRightEdgeColor: TColor;
FScrollBars: TScrollStyle;
fTextHeight: Integer;
fTextOffset: Integer;
fTopLine: Integer;
fHighLighter: TmwCustomHighLighter;
fSelectedColor: TmwSelectedColor;
{$IFNDEF UNDO_DEBUG}
fUndoList: TUndoList;
fRedoList: TUndoList;
{$ENDIF}
fBookMarks: array[0..9] of TMark;
fDragBlockBegin: TPoint;
fDragBlockEnd: TPoint;
fMouseDownX: integer;
fMouseDownY: integer;
fBookMarkOpt: TmwBookMarkOpt;
fOnPaint: TPaintEvent;
fOnChange: TNotifyEvent;
fSelectionChange: TNotifyEvent;
fBorderStyle: TBorderStyle;
fHideSelection: boolean;
fMouseWheelAccumulator: integer;
fOverwriteCaret: TCaretType;
fInsertCaret: TCaretType;
fCaretOffset: TPoint;
fOnProcessCommand: TProcessCommandEvent;
fOnProcessUserCommand: TProcessCommandEvent;
fKeyStrokes: TmwKeyStrokes;
fModified: Boolean;
fMarkList: TMarkList;
fOnPlaceMark: TPlaceMarkEvent;
fExtraLineSpacing: integer;
fOnCommandDone: TNotifyEvent;
fSelectionMode: TSelectionMode;
fOnPrintStatus: TPrintStatusEvent;
fWantTabs: boolean;
fGutter: TmwGutter;
fClipboardFormats: TmwEditExporters;
fTabWidth: integer;
fOnSpecialLineColors: TSpecialLineColorsEvent;
fTextDrawer: TheTextDrawer;
fInvalidateRect: TRect;
fStateFlags: TmwStateFlags;
fOptions: TmwEditorOptions;
fInternalImage: TmwInternalImage;
fStatusChanges: TmwStatusChanges;
fOnStatusChange: TStatusChangeEvent;
fLastKey: word;
fLastShiftState: TShiftState;
fProcChar: char;
fOnDropFiles: TDropFilesEvent;
fTSearch: TmwEditSearch;
fOnReplaceText: TReplaceTextEvent;
procedure ComputeCaret(X, Y: Integer);
function GetBlockBegin: TPoint;
function GetBlockEnd: TPoint;
function GetCaretX: Integer;
function GetCaretY: Integer;
function GetFont: TFont;
function GetLeftChar: Integer;
function GetLineCount: Integer;
function GetLineText: string;
function GetSelAvail: Boolean;
function GetText: string;
function GetTopLine: Integer;
procedure FontChanged(Sender: TObject);
function LeftSpaces(const Line: string): Integer;
procedure LinesChanging(Sender: TObject);
procedure LinesChanged(Sender: TObject);
procedure SetBlockBegin(Value: TPoint);
procedure SetBlockEnd(Value: TPoint);
procedure SetWordBlock(Value: TPoint);
procedure SetCaretX(Value: Integer);
procedure SetCaretY(Value: Integer);
procedure SetGutterWidth(Value: Integer);
procedure SetFont(const Value: TFont);
procedure SetLeftChar(Value: Integer);
procedure SetLines(Value: TStrings);
procedure SetLineText(Value: string);
procedure SetScrollBars(const Value: TScrollStyle);
procedure SetText(const Value: string);
procedure SetTopLine(Value: Integer);
procedure UpdateCaret;
procedure UpdateScrollBars(Force: boolean);
function GetSelText: string;
procedure SetSelText(const Value: string);
function ScanFrom(Index: integer): integer;
function GetCanUndo: Boolean;
function GetCanRedo: Boolean;
function GetCanPaste: Boolean;
procedure SetRightEdge(Value: Integer);
procedure SetRightEdgeColor(Value: TColor);
procedure SetMaxUndo(const Value: Integer);
function GetMaxUndo: Integer;
procedure SetHighlighter(const Value: TmwCustomHighLighter);
procedure SetBorderStyle(Value: TBorderStyle);
procedure SetHideSelection(const Value: boolean);
procedure SetInsertMode(const Value: boolean);
procedure SetInsertCaret(const Value: TCaretType);
procedure SetOverwriteCaret(const Value: TCaretType);
function GetCaretXY: TPoint;
procedure SetKeystrokes(const Value: TmwKeyStrokes);
procedure SetMaxLeftChar(Value: integer);
procedure SetExtraLineSpacing(const Value: integer);
procedure SetSelTextExternal(const Value: string);
procedure SetSelectionMode(const Value: TSelectionMode);
procedure SetGutter(const Value: TmwGutter);
procedure SelectedColorsChanged(Sender: TObject);
procedure GutterChanged(Sender: TObject);
procedure BookMarkOptionsChanged(Sender: TObject);
procedure SetWantTabs(const Value: boolean);
procedure SetTabWidth(Value: integer);
procedure LockUndo;
procedure UnLockUndo;
function IsPointInSelection(Value: TPoint): boolean;
procedure SetOptions(Value: TmwEditorOptions);
procedure SizeOrFontChanged(bFont: boolean);
procedure MoveCaretHorz(DX: integer; SelectionCommand: boolean);
procedure MoveCaretVert(DY: integer; SelectionCommand: boolean);
procedure MoveCaretAndSelection(ptBefore, ptAfter: TPoint;
SelectionCommand: boolean);
procedure StatusChanged(AChanges: TmwStatusChanges);
procedure DoTabKey;
private
procedure WMDropFiles(var Message: TMessage); message WM_DROPFILES;
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMHScroll(var Message: TWMScroll); message WM_HSCROLL;
{$IFDEF MWE_MBCSSUPPORT}
procedure WMImeComposition(var Msg: TMessage); message WM_IME_COMPOSITION;
procedure WMImeNotify(var Message: TMessage); message WM_IME_NOTIFY;
{$ENDIF}
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMVScroll(var Message: TWMScroll); message WM_VSCROLL;
procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure DecPaintLock;
procedure HideCaret;
procedure IncPaintLock;
procedure ListAdded(Sender: TObject);
procedure ListCleared(Sender: TObject);
procedure ListDeleted(Index: Integer);
procedure ListInserted(Index: Integer);
procedure ListLoaded(Sender: TObject);
procedure ListPutted(Index: Integer);
procedure ListScanRanges(Sender: TObject);
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure DblClick; override;
procedure KeyPress(var Key: Char); override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure PaintGutter(AClip: TRect; FirstLine, LastLine: integer); virtual;
procedure PaintTextLines(AClip: TRect; FirstLine, LastLine,
FirstCol, LastCol: integer); virtual;
procedure Paint; override;
procedure SetName(const Value: TComponentName); override;
procedure ShowCaret;
procedure Loaded; override;
function CoorToIndex(CPos: TPoint): integer;
function IndexToCoor(ind: integer): TPoint;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
procedure InitializeCaret;
procedure MarkListChange(Sender: TObject);
procedure ProcessCommand(var Command: TmwEditorCommand; var AChar: char;
Data: pointer); virtual;
// 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): TmwEditorCommand;
procedure SelectionChange; virtual;
procedure SetSelTextPrimitive(PasteMode: TSelectionMode; Value: PChar;
Tag: PInteger);
{$IFDEF MWE_MBCSSUPPORT}
procedure MBCSGetSelRangeInLineWhenColumnSelectionMode(const s: string;
var ColFrom, ColTo: Integer);
{$ENDIF}
procedure PrintStatus(Status: TmwPrintStatus; PageNumber: integer;
var Abort: boolean); virtual;
// note: FirstLine and LastLine don't need to be in correct order
procedure InvalidateGutter(FirstLine, LastLine: integer);
procedure InvalidateLines(FirstLine, LastLine: integer);
procedure RecalcCharExtent;
procedure HighlighterAttrChanged(Sender: TObject);
procedure SetCaretXY(Value: TPoint); virtual;
procedure CreateWnd; override;
procedure DestroyWnd; override;
public
{$IFDEF UNDO_DEBUG}
fUndoList: TUndoList;
fRedoList: TUndoList;
{$ENDIF}
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure WndProc(var msg: TMessage); override;
procedure DragDrop(Source: TObject; X, Y: Integer); override;
function CaretXPix: Integer;
function CaretYPix: Integer;
procedure DoCopyToClipboard(const SText: string);
procedure CopyToClipboard;
procedure CutToClipboard;
procedure PasteFromClipboard;
procedure SelectAll;
procedure ClearAll;
procedure Undo;
procedure Redo;
procedure ClearBookMark(BookMark: Integer);
procedure GotoBookMark(BookMark: Integer);
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
function GetBookMark(BookMark: integer; var X, Y: integer): boolean;
function IsBookmark(BookMark: integer): boolean;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure EnsureCursorPosVisible;
procedure CommandProcessor(Command: TmwEditorCommand; AChar: char;
Data: pointer); virtual;
function NextWordPos: TPoint; virtual;
function PrevWordPos: TPoint; virtual;
procedure SetDefaultKeystrokes; virtual;
procedure BeginUpdate;
procedure EndUpdate;
function GetSelEnd: integer;
function GetSelStart: integer;
procedure SetSelEnd(const Value: integer);
procedure SetSelStart(const Value: integer);
procedure SetSelWord;
procedure ClearUndo;
procedure RefreshAllTokens;
// Pass NIL in PrintFont to use editor's current font.
procedure Print(PrintFont: TFont; Options: TmwPrintOptions);
procedure SaveStreamToClipboardFormat(const ClipboardFormat: Word;
Stream: TStream);
procedure SaveToFile(const FileName: string);
procedure ExportToFile(const FileName, ATitle: string;
WithBackground: boolean; Format: TmwEditExporter);
procedure ExportToClipboard(Format: TmwEditExporter);
procedure CopyToClipboardEx;
procedure SetOptionFlag(Flag: TmwEditorOption; Value: boolean);
procedure ReadState(Reader: TReader); override;
procedure AddKey(Command: TmwEditorCommand; Key1: word; SS1: TShiftState;
Key2: word; SS2: TShiftState);
function SearchReplace(const ASearch, AReplace: string;
AOptions: TmwSearchOptions): integer;
public
property BlockBegin: TPoint read GetBlockBegin write SetBlockBegin;
property BlockEnd: TPoint read GetBlockEnd write SetBlockEnd;
property CanPaste: Boolean read GetCanPaste;
property CanRedo: boolean read GetCanRedo;
property CanUndo: Boolean read GetCanUndo;
property CaretX: Integer read GetCaretX write SetCaretX;
property CaretY: Integer read GetCaretY write SetCaretY;
property CaretXY: TPoint read GetCaretXY write SetCaretXY;
property CharsInWindow: Integer read fCharsInWindow;
property CharWidth: integer read fCharWidth;
property ClipboardFormats: TmwEditExporters read FClipboardFormats
write FClipboardFormats;
property LeftChar: Integer read GetLeftChar write SetLeftChar;
property LineHeight: integer read fTextHeight;
property LinesInWindow: Integer read fLinesInWindow;
property LineText: string read GetLineText write SetLineText;
property Marks: TMarkList read fMarkList;
property MaxLeftChar: integer read fMaxLeftChar write SetMaxLeftChar;
property Modified: Boolean read fModified write fModified;
property PaintLock: Integer read fPaintLock;
property SelAvail: Boolean read GetSelAvail;
property SelText: string read GetSelText write SetSelTextExternal;
property Text: string read GetText write SetText;
property TopLine: Integer read GetTopLine write SetTopLine;
published
property Align;
{$IFDEF MWE_COMPILER_4_UP}
property Anchors;
property Constraints;
{$ENDIF}
property Color;
property Ctl3D;
property Enabled;
property Height;
property Name;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop default True;
property Tag;
property Visible;
property Width;
property BookMarkOptions: TmwBookMarkOpt
read fBookMarkOpt write fBookMarkOpt;
property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle
default bsSingle;
property ExtraLineSpacing: integer
read fExtraLineSpacing write SetExtraLineSpacing default 0;
property Font: TFont read GetFont write SetFont;
property Gutter: TmwGutter read fGutter write SetGutter;
property HideSelection: boolean read fHideSelection write SetHideSelection
default false;
property HighLighter: TmwCustomHighLighter
read fHighLighter write SetHighlighter;
property InsertCaret: TCaretType read FInsertCaret write SetInsertCaret
default ctVerticalLine;
property InsertMode: boolean read fInserting write SetInsertMode
default true;
property Keystrokes: TmwKeyStrokes
read FKeystrokes write SetKeystrokes;
property LineCount: Integer read GetLineCount;
property Lines: TStrings read fLines write SetLines;
property MaxUndo: Integer read GetMaxUndo write SetMaxUndo;
property Options: TmwEditorOptions read fOptions write SetOptions
default MWEDIT_DEFAULT_OPTIONS;
property OverwriteCaret: TCaretType read FOverwriteCaret
write SetOverwriteCaret default ctBlock;
property ReadOnly: Boolean read fReadOnly write fReadOnly;
property RightEdge: Integer read fRightEdge write SetRightEdge default 80;
property RightEdgeColor: TColor
read fRightEdgeColor write SetRightEdgeColor default clSilver;
property ScrollBars: TScrollStyle
read FScrollBars write SetScrollBars default ssBoth;
property SelectedColor: TmwSelectedColor
read FSelectedColor write FSelectedColor;
property SelectionMode: TSelectionMode
read FSelectionMode write SetSelectionMode default smNormal;
property TabWidth: integer read fTabWidth write SetTabWidth default 8;
property WantTabs: boolean read fWantTabs write SetWantTabs;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
{$IFDEF MWE_COMPILER_4_UP}
property OnEndDock;
{$ENDIF}
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF MWE_COMPILER_4_UP}
property OnStartDock;
{$ENDIF}
property OnStartDrag;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnCommandDone: TNotifyEvent
read fOnCommandDone write fOnCommandDone;
property OnDropFiles: TDropFilesEvent read fOnDropFiles write fOnDropFiles;
property OnPaint: TPaintEvent read fOnPaint write fOnPaint;
property OnPlaceBookmark: TPlaceMarkEvent
read FOnPlaceMark write FOnPlaceMark;
property OnPrintStatus: TPrintStatusEvent
read FOnPrintStatus write FOnPrintStatus;
property OnProcessCommand: TProcessCommandEvent
read FOnProcessCommand write FOnProcessCommand;
property OnProcessUserCommand: TProcessCommandEvent
read FOnProcessUserCommand write FOnProcessUserCommand;
property OnReplaceText: TReplaceTextEvent read fOnReplaceText
write fOnReplaceText;
property OnSelectionChange: TNotifyEvent
read fSelectionChange write fSelectionChange;
property OnSpecialLineColors: TSpecialLineColorsEvent
read fOnSpecialLineColors write fOnSpecialLineColors;
property OnStatusChange: TStatusChangeEvent
read fOnStatusChange write fOnStatusChange;
end;
procedure Register;
implementation
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?