📄 jvrichedit.pas
字号:
procedure ColorChanged; override;
procedure FontChanged; override;
function GetConverter(const AFileName: string; const Kind: TJvConversionKind): TJvConversion; overload;
function GetConverter(AStream: TStream; const Kind: TJvConversionKind): TJvConversion; overload;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
function GetPopupMenu: TPopupMenu; override;
procedure TextNotFound(Dialog: TFindDialog); virtual;
procedure RequestSize(const Rect: TRect); virtual;
procedure SelectionChange; dynamic;
function ProtectChange(const Msg: TMessage; StartPos,
EndPos: Integer): Boolean; dynamic;
function SaveClipboard(NumObj, NumChars: Integer): Boolean; dynamic;
procedure URLClick(const URLText: string; Button: TMouseButton); dynamic;
procedure SetPlainText(Value: Boolean); virtual;
procedure CloseFindDialog(Dialog: TFindDialog); virtual;
procedure DoSetMaxLength(Value: Integer); override;
procedure DoConversionProgress(const AProgress: Integer);
function GetSelLength: Integer; override;
function GetSelStart: Integer; override;
function GetSelText: string; override;
procedure SetSelLength(Value: Integer); override;
procedure SetSelStart(Value: Integer); override;
property AllowInPlace: Boolean read FAllowInPlace write FAllowInPlace default True;
property AutoAdvancedTypography: Boolean read FAutoAdvancedTypography write FAutoAdvancedTypography default True;
property AdvancedTypography: Boolean read GetAdvancedTypography write SetAdvancedTypography stored
IsAdvancedTypographyStored;
property AllowObjects: Boolean read FAllowObjects write SetAllowObjects default True;
property AutoURLDetect: Boolean read GetAutoURLDetect write SetAutoURLDetect default True;
property AutoVerbMenu: Boolean read FAutoVerbMenu write FAutoVerbMenu default True;
property HideSelection: Boolean read FHideSelection write SetHideSelection default True;
property HideScrollBars: Boolean read FHideScrollBars
write SetHideScrollBars default True;
property Title: string read FTitle write SetTitle;
property LangOptions: TRichLangOptions read GetLangOptions write SetLangOptions default [rlAutoFont];
property Lines: TStrings read FLines write SetRichEditStrings;
property OLEDragDrop: Boolean read FOLEDragDrop write SetOLEDragDrop default True;
property PlainText: Boolean read FPlainText write SetPlainText default False;
property SelectionBar: Boolean read FSelectionBar write SetSelectionBar default True;
property StreamFormat: TRichStreamFormat read GetStreamFormat write SetStreamFormat default sfDefault;
property StreamMode: TRichStreamModes read GetStreamMode write SetStreamMode default [];
property UndoLimit: Integer read FUndoLimit write SetUndoLimit default 100;
property WordSelection: Boolean read GetWordSelection write SetWordSelection default True;
property ScrollBars default ssBoth;
property TabStop default True;
property SelText: string read GetSelText write SetSelText;
// Zoom: zoom in/out percentage (100=normal) note: no need to set default (100) in constructor.
property Zoom: Integer read GetZoom write SetZoom default 100;
property OnSaveClipboard: TRichEditSaveClipboard read FOnSaveClipboard
write FOnSaveClipboard;
property OnSelectionChange: TNotifyEvent read FOnSelChange write FOnSelChange;
property OnProtectChange: TRichEditProtectChange read FOnProtectChange
write FOnProtectChange; { obsolete }
property OnProtectChangeEx: TRichEditProtectChangeEx read FOnProtectChangeEx
write FOnProtectChangeEx;
property OnResizeRequest: TRichEditResizeEvent read FOnResizeRequest
write FOnResizeRequest;
property OnURLClick: TRichEditURLClickEvent read FOnURLClick write FOnURLClick;
property OnTextNotFound: TRichEditFindErrorEvent read FOnTextNotFound write FOnTextNotFound;
property OnCloseFindDialog: TRichEditFindCloseEvent read FOnCloseFindDialog
write FOnCloseFindDialog;
property OnConversionProgress: TRichEditProgressEvent read FOnConversionProgress write FOnConversionProgress;
// From JvRichEdit.pas by S閎astien Buysse
property OnVerticalScroll: TNotifyEvent read FOnVerticalScroll write FOnVerticalScroll;
property OnHorizontalScroll: TNotifyEvent read FOnHorizontalScroll write FOnHorizontalScroll;
property ForceUndo: Boolean read FForceUndo write FForceUndo default True;
property UseFixedPopup: Boolean read FUseFixedPopup write FUseFixedPopup default True;
// from CCR
property OnInPlaceActivate: TNotifyEvent read FOnInPlaceActivate write FOnInPlaceActivate;
property OnInPlaceDeactivate: TNotifyEvent read FOnInPlaceDeactivate write FOnInPlaceDeactivate;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Clear; override;
procedure SaveToImage(Picture: TPicture);
procedure InsertGraphic(AGraphic: TGraphic; const Sizeable: Boolean);
// InsertFormatText inserts formatted text at the cursor position given by Index.
// If Index < 0, the text is inserted at the current SelStart position.
// S is the string to insert
// AFont is the font to use. If AFont = nil, then the current attributes at the insertion point are used.
// NOTE: this procedure does not reset the attributes after the call, i.e if you change the text color
// it will remain that color until you change it again.
procedure InsertFormatText(Index: Integer; const S: string; const AFont: TFont = nil); overload;
procedure InsertFormatText(Index: Integer; const S: string;
FontStyle: TFontStyles; const FontName: string = ''; const FontColor: TColor = clDefault; FontHeight: Integer = 0); overload;
// AddFormatText works just like InsertFormatText but always moves the insertion
// point to the end of the available text
procedure AddFormatText(const S: string; const AFont: TFont = nil); overload;
procedure AddFormatText(const S: string; FontStyle: TFontStyles; const FontName: string = ''; const FontColor: TColor = clDefault; FontHeight: Integer = 0); overload;
procedure SetSelection(StartPos, EndPos: Longint; ScrollCaret: Boolean);
function GetSelection: TCharRange;
function GetTextRange(StartPos, EndPos: Longint): string;
function LineFromChar(CharIndex: Integer): Integer;
function GetLineIndex(LineNo: Integer): Integer;
function GetLineLength(CharIndex: Integer): Integer;
function WordAtCursor: string;
function FindText(const SearchStr: string;
StartPos, Length: Integer; Options: TRichSearchTypes): Integer;
function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; override;
function GetCaretPos: TPoint; override;
function GetCharPos(CharIndex: Integer): TPoint;
function InsertObjectDialog: Boolean;
function ObjectPropertiesDialog: Boolean;
function PasteSpecialDialog: Boolean;
function FindDialog(const SearchStr: string): TFindDialog;
function ReplaceDialog(const SearchStr, ReplaceStr: string): TReplaceDialog;
function FindNext: Boolean;
procedure Print(const Caption: string); virtual;
class procedure RegisterConversionFormat(AConverter: TJvConversion);
class procedure RegisterMSTextConverters;
class function Filter(const AKind: TJvConversionKind): string;
procedure ClearUndo;
procedure Redo;
procedure StopGroupTyping;
procedure CloseActiveObject; // from CCR
property CanFindNext: Boolean read GetCanFindNext;
property CanRedo: Boolean read GetCanRedo;
property CanPaste: Boolean read GetCanPaste;
property RedoName: TUndoName read GetRedoName;
property UndoName: TUndoName read GetUndoName;
property DefaultConverter: TJvConversion read FDefaultConverter write FDefaultConverter;
property DefAttributes: TJvTextAttributes read FDefAttributes write SetDefAttributes;
property SelAttributes: TJvTextAttributes read FSelAttributes write SetSelAttributes;
property WordAttributes: TJvTextAttributes read FWordAttributes write SetWordAttributes;
property PageRect: TRect read FPageRect write FPageRect;
property Paragraph: TJvParaAttributes read FParagraph;
property SelectionType: TRichSelectionType read GetSelectionType;
end;
TJvRichEdit = class(TJvCustomRichEdit)
published
property AdvancedTypography;
property Align;
property Alignment;
property AutoAdvancedTypography;
property AutoURLDetect;
property AutoVerbMenu;
property AllowObjects;
property AllowInPlace;
property Anchors;
property BiDiMode;
property BorderWidth;
property DragKind;
property BorderStyle;
property ClipboardCommands;
property Color;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property ForceUndo;
property HideSelection;
property HideScrollBars;
property HintColor;
property Title;
property ImeMode;
property ImeName;
property Constraints;
property ParentBiDiMode;
property LangOptions;
property Lines;
property MaxLength;
property OLEDragDrop;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PlainText;
property PopupMenu;
property ReadOnly;
property ScrollBars;
property SelectionBar;
property SelText;
property ShowHint;
property StreamFormat;
property StreamMode;
property TabOrder;
property TabStop;
property UndoLimit;
property UseFixedPopup;
property Visible;
property WantTabs;
property WantReturns;
property WordSelection;
property WordWrap;
property Zoom; // added by J.G. Boerema
property OnChange;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnContextPopup;
property OnConversionProgress;
property OnEndDock;
property OnStartDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnProtectChange; { obsolete }
property OnProtectChangeEx;
property OnResizeRequest;
property OnSaveClipboard;
property OnSelectionChange;
property OnStartDrag;
property OnTextNotFound;
property OnCloseFindDialog;
property OnURLClick;
property OnMouseEnter;
property OnMouseLeave;
property OnParentColorChange;
property OnVerticalScroll;
property OnHorizontalScroll;
// From CCR
property OnInPlaceActivate;
property OnInPlaceDeactivate;
end;
var
RichEditVersion: TRichEditVersion;
{ Two procedures to construct RTF from a bitmap. You can use this to
insert bitmaps in the rich edit control, for example:
Stream := TMemoryStream.Create;
try
BitmapToRTF(SomeBitmap, Stream);
Stream.Position := 0;
JvRichEdit1.StreamFormat := sfRichText;
JvRichEdit1.StreamMode := [smSelection, smPlainRtf];
JvRichEdit1.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
But:
* if you stream out the RTF content of the rich edit control, the bitmaps
are *not* included. Use TJvRichEdit.InsertGraphic if you want the bitmaps
to be included in the RTF.
* TJvRichEdit.AllowObjects must be set to True.
* BitmapToRTF is the fastest, TJvRichEdit.InsertGraphic the slowest.
}
{ uses the \dibitmap identifier }
procedure BitmapToRTF(ABitmap: TBitmap; AStream: TStream);
{ uses the \wmetafile identifier }
function BitmapToRTF2(ABitmap: TBitmap; AStream: TStream): Boolean;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvRichEdit.pas,v $';
Revision: '$Revision: 1.69 $';
Date: '$Date: 2005/03/09 14:57:29 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
OleCtnrs,
Printers, ComStrs, OleConst, OleDlg, Math, Registry, Contnrs,
JvThemes, JvConsts, JvResources, JvFixedEditPopUp;
type
PENLink = ^TENLink;
PENOleOpFailed = ^TENOleOpFailed;
TFindTextEx = TFindTextExA;
TTextRangeA = record
chrg: TCharRange;
lpstrText: PAnsiChar;
end;
TTextRangeW = record
chrg: TCharRange;
lpstrText: PWideChar;
end;
TTextRange = TTextRangeA;
{ OLE Extensions to the Rich Text Editor }
{ Converted from RICHOLE.H }
{ Structure passed to GetObject and InsertObject }
_ReObject = record
cbStruct: DWORD; { Size of structure }
cp: ULONG; { Character position of object }
clsid: TCLSID; { Class ID of object }
poleobj: IOleObject; { OLE object interface }
pstg: IStorage; { Associated storage interface }
polesite: IOleClientSite; { Associated client site interface }
sizel: TSize; { Size of object (may be 0,0) }
dvAspect: Longint; { Display aspect to use }
dwFlags: DWORD; { Object status flags }
dwUser: DWORD; { DWORD for user's use }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -