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 + -
显示快捷键?