cxrichedit.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,877 行 · 第 1/5 页

PAS
1,877
字号
    function GetInnerRich: TcxRichInnerEdit;
    procedure SetLines(Value: TStrings);
    function GetActiveProperties: TcxCustomRichEditProperties;
    function GetProperties: TcxCustomRichEditProperties;
    function GetRichVersion: Integer;
    procedure SetProperties(Value: TcxCustomRichEditProperties);
    function GetCanUndo: Boolean;
    function GetDefAttributes: TTextAttributes;
    function GetDefaultConverter: TConversionClass;
    function GetPageRect: TRect;
    function GetParagraph: TParaAttributes;
    function GetSelAttributes: TTextAttributes;
    procedure RefreshScrollBars;
    procedure SetDefAttributes(const Value: TTextAttributes);
    procedure SetDefaultConverter(Value: TConversionClass);
    procedure SetPageRect(const Value: TRect);
    procedure SetSelAttributes(const Value: TTextAttributes);
    procedure EMCanPaste(var Message: TMessage); message EM_CANPASTE;
    procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
  protected
    procedure AdjustInnerEdit; override;
    function CanFocusOnClick: Boolean; override;
    function CanKeyDownModifyEdit(Key: Word; Shift: TShiftState): Boolean; override;
    procedure ContainerStyleChanged(Sender: TObject); override;
    function DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; override;
    function GetEditValue: TcxEditValue; override;
    function GetInnerEditClass: TControlClass; override;
    procedure ChangeHandler(Sender: TObject); override;
    procedure Scroll(AScrollBarKind: TScrollBarKind; AScrollCode: TScrollCode;
      var AScrollPos: Integer); override;
    procedure Initialize; override;
    procedure InternalSetEditValue(const Value: TcxEditValue;
      AValidateEditValue: Boolean); override;
    procedure InternalValidateDisplayValue(const ADisplayValue: TcxEditValue); override;
    function CanDeleteSelection: Boolean;
    procedure Changed(Sender: TObject);
    procedure DoOnResizeRequest(const R: TRect);
    procedure DoOnSelectionChange;
    procedure DoTextChanged; override;
    procedure PropertiesChanged(Sender: TObject); override;
    procedure ResetEditValue; override;
    procedure SetParent(AParent: TWinControl); override;
    procedure SynchronizeDisplayValue; override;
    procedure SynchronizeEditValue; override;
    procedure UpdateScrollBars; override;
    function GetEditPopupMenuInstance: TComponent; virtual;
    function IsNavigationKey(Key: Word; Shift: TShiftState): Boolean; virtual;
    function UpdateContentOnFocusChanging: Boolean; override;
    procedure UpdateEditPopupMenuItems(APopupMenu: TComponent); virtual;
    property EditPopupMenu: TComponent read FEditPopupMenu write FEditPopupMenu;
    property InnerRich: TcxRichInnerEdit read GetInnerRich;
    property PropertiesChange: Boolean read FPropertiesChange;
  public
    destructor Destroy; override;

    procedure ClearSelection; override;
    procedure CutToClipboard; override;
    function FindTexT(const ASearchStr: string; AStartPos, ALength: Integer;
      AOptions: TSearchTypes): Integer;
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
    procedure PasteFromClipboard; override;
    procedure PrepareEditValue(const ADisplayValue: TcxEditValue;
      out EditValue: TcxEditValue; AEditFocused: Boolean); override;
    procedure Print(const Caption: string); virtual;
    procedure SaveSelectionToStream(Stream: TStream); virtual;
    procedure Undo; override;
    function InsertObject: Boolean;
    function PasteSpecial: Boolean;
    function ShowObjectProperties: Boolean;
    class procedure RegisterConversionFormat(const AExtension: string;
      AConversionClass: TConversionClass);
    property ActiveProperties: TcxCustomRichEditProperties
      read GetActiveProperties;
    property CanUndo: Boolean read GetCanUndo;
    property DefAttributes: TTextAttributes read GetDefAttributes write SetDefAttributes;
    property DefaultConverter: TConversionClass
      read GetDefaultConverter write SetDefaultConverter;
    property Lines: TStrings read GetLines write SetLines;
    property PageRect: TRect read GetPageRect write SetPageRect;
    property Paragraph: TParaAttributes read GetParagraph;
    property Properties: TcxCustomRichEditProperties read GetProperties
      write SetProperties;
    property RichVersion: Integer read GetRichVersion;
    property SelAttributes: TTextAttributes read GetSelAttributes write SetSelAttributes;
  end;

  { TcxRichEdit }

  TcxRichEdit = class(TcxCustomRichEdit)
  private
    function GetActiveProperties: TcxRichEditProperties;
    function GetProperties: TcxRichEditProperties;
    procedure SetProperties(Value: TcxRichEditProperties);
  public
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
    property ActiveProperties: TcxRichEditProperties read GetActiveProperties;
  published
    property Align;
    property Anchors;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property ImeMode;
    property ImeName;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property Properties: TcxRichEditProperties read GetProperties
      write SetProperties;
    property Lines; // must be after Properties because of Properties.Alignment
    property ShowHint;
    property Style;
    property StyleDisabled;
    property StyleFocused;
    property StyleHot;
    property TabOrder;
    property TabStop;
    property Visible;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEditing;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseEnter;
    property OnMouseLeave;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
    property OnStartDock;
    property OnStartDrag;
  end;

  TcxRichInnerEditHelper = class(TcxInterfacedPersistent,
    IcxContainerInnerControl, IcxCustomInnerEdit, IcxInnerTextEdit,
    IcxInnerMemo)
  private
    FEdit: TcxRichInnerEdit;
  protected
    property Edit: TcxRichInnerEdit read FEdit;
  public
    constructor Create(AEdit: TcxRichInnerEdit); reintroduce; virtual;

    // IcxContainerInnerControl
    function GetControlContainer: TcxContainer;
    function GetControl: TWinControl;

    // IcxCustomInnerEdit
    function CallDefWndProc(AMsg: UINT; WParam: WPARAM;
      LParam: LPARAM): LRESULT;
    function GetEditValue: TcxEditValue;
    function GetOnChange: TNotifyEvent;
    procedure LockBounds(ALock: Boolean);
    procedure SafelySetFocus;
    procedure SetEditValue(const Value: TcxEditValue);
    procedure SetParent(Value: TWinControl);
    procedure SetOnChange(Value: TNotifyEvent);

    // IcxInnerTextEdit
    procedure ClearSelection;
    procedure CopyToClipboard;
    function GetAlignment: TAlignment;
    function GetAutoSelect: Boolean;
    function GetCharCase: TEditCharCase;
    function GetEchoMode: TcxEditEchoMode;
    function GetFirstVisibleCharIndex: Integer;
    function GetHideSelection: Boolean;
    function GetImeLastChar: Char;
    function GetImeMode: TImeMode;
    function GetImeName: TImeName;
    function GetInternalUpdating: Boolean;
    function GetMaxLength: Integer;
    function GetMultiLine: Boolean;
    function GetOEMConvert: Boolean;
    function GetOnSelChange: TNotifyEvent;
    function GetPasswordChar: TCaptionChar;
    function GetReadOnly: Boolean;
    function GetSelLength: Integer;
    function GetSelStart: Integer;
    function GetSelText: string;
    procedure SelectAll;
    procedure SetAlignment(Value: TAlignment);
    procedure SetAutoSelect(Value: Boolean);
    procedure SetCharCase(Value: TEditCharCase);
    procedure SetEchoMode(Value: TcxEditEchoMode);
    procedure SetHideSelection(Value: Boolean);
    procedure SetInternalUpdating(Value: Boolean);
    procedure SetImeMode(Value: TImeMode);
    procedure SetImeName(const Value: TImeName);
    procedure SetMaxLength(Value: Integer);
    procedure SetOEMConvert(Value: Boolean);
    procedure SetOnSelChange(Value: TNotifyEvent);
    procedure SetPasswordChar(Value: TCaptionChar);
    procedure SetReadOnly(Value: Boolean);
    procedure SetSelLength(Value: Integer);
    procedure SetSelStart(Value: Integer);
    procedure SetSelText(Value: string);

    // IcxInnerMemo
    function GetCaretPos: TPoint;
    function GetLines: TStrings;
    function GetScrollBars: TScrollStyle;
    function GetWantReturns: Boolean;
    function GetWantTabs: Boolean;
    function GetWordWrap: Boolean;
    procedure SetCaretPos(const Value: TPoint);
    procedure SetScrollBars(Value: TScrollStyle);
    procedure SetWantReturns(Value: Boolean);
    procedure SetWantTabs(Value: Boolean);
    procedure SetWordWrap(Value: Boolean);
  end;

  { TcxRichEditStrings }

  TcxRichEditStreamOperation = (esoLoadFrom, esoSaveTo);

  TcxRichEditStreamOperationInfo = record
    EditStream: TEditStream;
    StreamInfo: TRichEditStreamInfo;
    TextType: Longint;
  end;

  TcxRichEditStrings = class(TStrings)
  private
    FConverter: TConversion;
    FRichEdit: TcxRichInnerEdit;
    FTextType: Longint;
    function CalcStreamTextType(AStreamOperation: TcxRichEditStreamOperation; ACustom: Boolean = False;
      ACustomStreamModes: TcxRichEditStreamModes = []): Longint;
    function GetAllowStreamModesByStreamOperation(AStreamOperation: TcxRichEditStreamOperation): TcxRichEditStreamModes;
    function GetStreamModes: TcxRichEditStreamModes;
  protected
    function Get(Index: Integer): string; override;
    procedure InitConverter(const AFileName: string); virtual;
    procedure InitStreamOperation(AStream: TStream;
      var AStreamOperationInfo: TcxRichEditStreamOperationInfo;
      AStreamOperation: TcxRichEditStreamOperation; ACustom: Boolean = False;
      ACustomStreamModes: TcxRichEditStreamModes = []);
    function GetCount: Integer; override;
    procedure Put(Index: Integer; const S: string); override;
    procedure SetUpdateState(Updating: Boolean); override;
    procedure SetTextStr(const Value: string); override;
    function GetLineBreakString: string; virtual;
    property RichEdit: TcxRichInnerEdit read FRichEdit;
  public
    constructor Create(ARichEdit: TcxRichInnerEdit); virtual;
    destructor Destroy; override;
    procedure Clear; override;
    procedure AddStrings(Strings: TStrings); override;
    procedure Delete(Index: Integer); override;
    procedure Insert(Index: Integer; const S: string); override;
    procedure LoadFromFile(const FileName: string); override;
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToFile(const FileName: string); override;
    procedure SaveToStream(Stream: TStream); override;
  end;

  { TcxRichInnerEdit }

  TcxRichInnerEdit = class(TRichEdit, IUnknown,
    IcxContainerInnerControl, IcxInnerEditHelper)
  private
    FAllowObjects: Boolean;
    FAutoSelect: Boolean;
    FAutoURLDetect: Boolean;
    FURLClickRange: TCharRange;
    FURLClickBtn: TMouseButton;
    FEchoMode: TcxEditEchoMode;
    FEscapePressed: Boolean;
    FHelper: TcxRichInnerEditHelper;
    FInternalUpdating: Boolean;
    FIsEraseBackgroundLocked: Boolean;
    FKeyPressProcessed: Boolean;
    FLockBoundsCount: Integer;
    FMemoMode: Boolean;
    FRichEditOle: IUnknown;
    FRichEditOleCallback: TObject;
    FRichVersion: Integer;
    FSavedPlainText: Boolean;
    FSelectionBar: Boolean;
    FStreamModes: TcxRichEditStreamModes;
    FRichLines: TcxRichEditStrings;
    FUseCRLF: Boolean;
    FOnQueryInsertObject: TcxRichEditQueryInsertObjectEvent;

    procedure CloseOleObjects;
    // IcxContainerInnerControl
    function GetControl: TWinControl;
    function GetControlContainer: TcxContainer;

    // IcxInnerEditHelper
    function GetHelper: IcxCustomInnerEdit;

    function GetAutoURLDetect: Boolean;
    function GetContainer: TcxCustomRichEdit;
    function GetLineCount: Integer;
    function GetLineIndex(AIndex: Integer): Integer;
    function GetLineLength(AIndex: Integer): Integer;
    function GetRichLines: TcxRichEditStrings;
    function GetRichEditOle: IcxRichEditOle;
    function GetRichEditOleCallBack: TcxRichEditOleCallback;
    function GetTextRange(AStartPos, AEndPos: Longint): string;
    procedure InternalSetMemoMode(AForcedReload: Boolean = False);
    procedure SetAllowObjects(Value: Boolean);
    procedure SetAutoURLDetect(Value: Boolean);
    procedure SetMemoMode(Value: Boolean);
    procedure SetRichLines(Value: TcxRichEditStrings);
    procedure SetSelectionBar(Value: Boolean);
    procedure SetOleControlActive(AActive: Boolean);
    procedure CMDocWindowActivate(var Message: TMessage); message CM_DOCWINDOWACTIVATE;
    procedure WMChar(var Message: TWMChar); message WM_CHAR;
    procedure WMClear(var Message: TMessage); message WM_CLEAR;
    procedure WMCut(var Message: TMessage); message WM_CUT;
    procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
    procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMMButtonDown(var Message: TWMMButtonDown); message WM_MBUTTONDOWN;
    procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure WMPaste(var Message: TMessage); message WM_PASTE;
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMSetFont(var Message: TWMSetFont); message WM_SETFONT;
    procedure WMTimer(var Message: TWMTimer); message WM_TIMER;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
    procedure EMReplaceSel(var Message: TMessage); message EM_REPLACESEL;
    procedure EMSetCharFormat(var Message: TMessage); message EM_SETCHARFORMAT;
    procedure EMSetParaFormat(var Message: TMessage); message EM_SETPARAFORMAT;
    procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
    procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
    procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
    procedure WMGetText(var Message: TMessage); message WM_GETTEXT;
    procedure WMGetTextLength(var Message: TWMGetTextLength); message WM_GETTEXTLENGTH;
    procedure WMSetText(var Message: TWMSetText); message WM_SETTEXT;
    procedure WMIMEComposition(var Message: TMessage); message WM_IME_COMPOSITION;
    procedure EMExLineFromChar(var Message: TMessage); message EM_EXLINEFROMCHAR;
    procedure EMLineLength(var Message: TMessage); message EM_LINELENGTH;
  protected
    procedure BeforeInsertObject(var AAllowInsertObject: Boolean; const ACLSID: TCLSID); dynamic;
    procedure Click; override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWindowHandle(const Params: TCreateParams); override;
    procedure DestroyWindowHandle; override;
    procedure CreateWnd; override;
    procedure DblClick; override;
    procedure DestroyWnd; override;
    procedure DoEnter; override;
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean); override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure KeyPress(var Key: Char); override;
    procedure KeyUp(var Key: Word; Shift: TShiftState); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseLeave(AControl: TControl); dynamic;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?