RichView.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:142k
源码类别:

RichEdit

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {       RichView                                        }
  4. {       TRichView: document viewer                      }
  5. {       (registered on "RichView" page of               }
  6. {       the Component Palette)                          }
  7. {                                                       }
  8. {       Copyright (c) Sergey Tkachenko                  }
  9. {       svt@trichview.com                               }
  10. {       http://www.trichview.com                        }
  11. {                                                       }
  12. {*******************************************************}
  13. unit RichView;
  14. interface
  15. {$I RV_Defs.inc}
  16. {$IFDEF RICHVIEWDEF6}
  17. {$WARN SYMBOL_DEPRECATED OFF}
  18. {$ENDIF}
  19. uses
  20.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  21.   DLines, RVItem, RVStyle, RVScroll, RVFMisc, RVFuncs, CRVData, CRVFData, RVRVData,
  22.   RVBack, RVUni, Registry, Menus, RichEdit,
  23.   {$IFDEF RICHVIEWDEF4}
  24.   ImgList,
  25.   {$ENDIF}
  26.   {$IFNDEF RVDONOTUSEDRAGDROP}
  27.   RVDragDrop, ActiveX,
  28.   {$ENDIF}
  29.   {$IFNDEF RVDONOTUSELIVESPELL}
  30.   RVWordPaint, RVThread,
  31.   {$ENDIF}
  32.   {$IFNDEF RVDONOTUSESMARTPOPUP}
  33.   RVPopup,
  34.   {$ENDIF}
  35.   ClipBrd,
  36.   RVRTFProps, RVRTFErr, StdCtrls;
  37. const
  38.   WM_RVDRAGDROP = WM_USER+16;
  39.   WM_RVRELOAD   = WM_USER+17;
  40. {------------------------------------------------------------------------------}
  41.   { For internal use. Types and constants for implementing Windows messages with
  42.     inplace editor.
  43.     Some messages cannot be processed directly in inplace editor, because
  44.     they can cause its destruction (from inside Delphi events).
  45.     Due to VCL design, destruction of component during processing these
  46.     messages will crash the application.
  47.     So, RV sends (via PostMessage) WM_RVEVENT to the root editor, which in its
  48.     case call proper event                                                     }
  49. const
  50.   WM_RVEVENT    = WM_USER + 15;
  51.   RV_TIMERID_SCROLLING = 1;
  52.   RV_TIMERID_ANIMATION = 2;
  53. type
  54.   // identifies event
  55.   TRVEventType = (rvetRVDblClick, rvetJump, rvetRVMouseUp, rvetRVMouseDown,
  56.     rvetClick, rvetDblClick, rvetMouseMove, rvetDragDrop, rvetEndDrag);
  57.   // basic class for data passed to WM_RVEVENT handler
  58.   TRVMessageData = class
  59.     public
  60.       Event: TRVEventType;
  61.   end;
  62.   // for OnClick
  63.   TRVClickMessageData = class (TRVMessageData)
  64.   end;
  65.   // for OnDblClick
  66.   TRVStdDblClickMessageData = class (TRVMessageData)
  67.   end;
  68.   // for OnRVDblClick
  69.   TRVDblClickMessageData = class (TRVMessageData)
  70.     public
  71.       ClickedWord: String;
  72.       StyleNo: Integer;
  73.   end;
  74.   // for OnJump
  75.   TRVJumpMessageData = class (TRVMessageData)
  76.     public
  77.       id: Integer;
  78.   end;
  79.   // for OnRVMouseMove
  80.   TRVMouseMoveMessageData = class (TRVMessageData)
  81.     public
  82.       X,Y,ItemNo: Integer;
  83.       Shift: TShiftState;
  84.   end;
  85.   // for OnRVMouseUp and OnRVMouseDown
  86.   TRVMouseUpDownMessageData = class (TRVMouseMoveMessageData)
  87.     public
  88.       Button: TMouseButton;
  89.   end;
  90.   // for rvetDragDrop and rvetEndDrag
  91.   TRVDNDMessageData = class (TRVMessageData)
  92.     public
  93.       X, Y: Integer;
  94.       Obj: TObject;
  95.   end;
  96.   TCustomRichView = class;
  97.   { Step of printing or repaginating }
  98.   TRVPrintingStep = (
  99.     rvpsStarting,       // operation is started
  100.     rvpsProceeding,     // next page is completed
  101.     rvpsFinished);      // operation is finished
  102.   { When live spelling is started? }
  103.   TRVLiveSpellingMode = (
  104.     rvlspManualStart,   // only on call of StartLiveSpelling
  105.     //rvlspOnFormat,      // when you call Format
  106.     rvlspOnChange);     // on editing operation (only for editor)
  107.   { When animations are started? }
  108.   TRVAnimationMode = (
  109.     rvaniDisabled,
  110.     rvaniManualStart,
  111.     rvaniOnFormat);
  112.   TRVYesNoAuto =
  113.   ( rvynaNo, rvynaYes, rvynaAuto );
  114.   { ---------------- Types for events of TCustomRichView --------------------- }
  115.   TJumpEvent = procedure (Sender: TObject; id: Integer) of object;
  116.   TRVMouseMoveEvent = procedure (Sender: TObject; id: Integer) of object;
  117.   TRVMouseEvent = procedure (Sender: TCustomRichView; Button: TMouseButton;
  118.     Shift: TShiftState; ItemNo, X, Y: Integer) of object;
  119.   TRVSaveComponentToFileEvent = procedure (Sender: TCustomRichView;
  120.     Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat;
  121.     var OutStr:String) of object;
  122.   TRVSaveItemToFileEvent = procedure (Sender: TCustomRichView;
  123.     const Path: String; RVData: TCustomRVData; ItemNo: Integer;
  124.     SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr:String;
  125.     var DoDefault: Boolean) of object;
  126.   TRVURLNeededEvent = procedure (Sender: TCustomRichView; id: Integer;
  127.     var url:String) of object;
  128.   TRVDblClickEvent = procedure (Sender: TCustomRichView; ClickedWord: String;
  129.     Style: Integer) of object;
  130.   TRVRightClickEvent = procedure (Sender: TCustomRichView; ClickedWord: String;
  131.     Style, X, Y: Integer) of object;
  132.   TRVFPictureNeededEvent = procedure  (Sender: TCustomRichView; Name: String;
  133.     Tag: Integer; var gr: TGraphic) of object;
  134.   TRVFControlNeededEvent = procedure  (Sender: TCustomRichView; Name: String;
  135.     Tag: Integer; var ctrl: TControl) of object;
  136.   TRVCheckpointVisibleEvent = procedure (Sender: TCustomRichView;
  137.     CheckpointData: TCheckpointData) of object;
  138.   TRVControlActionEvent = procedure (Sender: TCustomRichView;
  139.     ControlAction: TRVControlAction; ItemNo: Integer;
  140.     var ctrl: TControl) of object;
  141.   TRVItemActionEvent = procedure (Sender: TCustomRichView;
  142.     ItemAction: TRVItemAction; Item: TCustomRVItemInfo; var Text: String;
  143.     RVData: TCustomRVData) of object;
  144.   TRVFImageListNeededEvent = procedure (Sender: TCustomRichView;
  145.     ImageListTag: Integer; var il: TCustomImageList) of object;
  146.   TRVHTMLSaveImageEvent = procedure (Sender: TCustomRichView;
  147.     RVData: TCustomRVData; ItemNo: Integer; const Path: String;
  148.     BackgroundColor: TColor; var Location: String;
  149.     var DoDefault: Boolean) of object;
  150.   TRVSaveImageEvent2 = procedure (Sender: TCustomRichView; Graphic: TGraphic;
  151.     SaveFormat: TRVSaveFormat; const Path, ImagePrefix: String;
  152.     var ImageSaveNo: Integer; var Location: String;
  153.     var DoDefault: Boolean) of object;
  154.   TRVReadHyperlink = procedure (Sender: TCustomRichView;
  155.     const Target, Extras: String; DocFormat: TRVLoadFormat;
  156.    var StyleNo, ItemTag: Integer; var ItemName: String) of object;
  157.    TRVWriteHyperlink = procedure (Sender: TCustomRichView;
  158.      id: Integer; RVData: TCustomRVData; ItemNo: Integer;
  159.      SaveFormat: TRVSaveFormat; var Target, Extras: String) of object;
  160.   TRVSaveRTFExtraEvent = procedure (Sender: TCustomRichView;
  161.     Area: TRVRTFSaveArea; Obj: TObject; Index1, Index2: Integer;
  162.     InStyleSheet: Boolean; var RTFCode: String) of object;
  163.   TRVSaveHTMLExtraEvent = procedure (Sender: TCustomRichView;
  164.     Area: TRVHTMLSaveArea; CSSVersion: Boolean;
  165.     var HTMLCode: String) of object;
  166.   TRVSaveParaToHTMLEvent = procedure (Sender: TCustomRichView;
  167.     RVData: TCustomRVData; ItemNo: Integer; ParaStart, CSSVersion: Boolean;
  168.     var HTMLCode: String) of object;
  169.   TRVPaintEvent = procedure (Sender: TCustomRichView;
  170.     Canvas: TCanvas; Prepaint: Boolean) of object;
  171.   TRVImportPictureEvent = procedure (Sender: TCustomRichView;
  172.     const Location: String; Width, Height: Integer;
  173.     var Graphic: TGraphic) of object;
  174.   TRVItemHintEvent = procedure (Sender: TCustomRichView;
  175.     RVData: TCustomRVData; ItemNo: Integer; var HintText: String) of object;
  176.   TRVProgressEvent = procedure (Sender: TCustomRichView;
  177.     Operation: TRVLongOperation; Stage: TRVProgressStage;
  178.     PercentDone: Byte) of object;
  179.   TRVSpellingCheckEvent = procedure (Sender: TCustomRichView; const AWord: String;
  180.     StyleNo: Integer; var Misspelled: Boolean) of object;
  181.   TRVSpellingCheckExEvent = procedure (Sender: TCustomRichView; const AWord: String;
  182.     RVData: TCustomRVData; ItemNo: Integer; var Misspelled: Boolean) of object;
  183.   TRVSmartPopupClickEvent = procedure (Sender: TCustomRichView;
  184.     Button: TCustomControl) of object;
  185.   //TRVReadHiddenTextEvent = procedure (Sender: TCustomRichView; const Text: String;
  186.   //  DocFormat: TRVLoadFormat;
  187.   { -------------------------------------------------------------------------- }
  188.   { TCustomRichView: ancestor class for TRichView, TRichViewEdit, TDBRichView,
  189.       TDBRichViewEdit
  190.   }
  191.   TCustomRichView = class(TRVScroller)
  192.   private
  193.     { Private declarations }
  194.     FCursor: TCursor;
  195.     FOptions: TRVOptions;
  196.     FRTFOptions: TRVRTFOptions;
  197.     ScrollTimerActive: Boolean;
  198.     FDelimiters: String;
  199.     FOnJump: TJumpEvent;
  200.     FOnRVMouseMove: TRVMouseMoveEvent;
  201.     FOnSaveComponentToFile: TRVSaveComponentToFileEvent;
  202.     FOnSaveItemToFile: TRVSaveItemToFileEvent;
  203.     FOnURLNeeded: TRVURLNeededEvent;
  204.     FOnRVDblClick: TRVDblClickEvent;
  205.     FOnRVRightClick: TRVRightClickEvent;
  206.     FOnRVMouseUp,FOnRVMouseDown: TRVMouseEvent;
  207.     FOnControlAction: TRVControlActionEvent;
  208.     FOnItemAction: TRVItemActionEvent;
  209.     FCPEventKind: TCPEventKind;
  210.     FOnRVFPictureNeeded: TRVFPictureNeededEvent;
  211.     FOnRVFControlNeeded: TRVFControlNeededEvent;
  212.     FOnRVFImageListNeeded: TRVFImageListNeededEvent;
  213.     FOnCheckpointVisible: TRVCheckpointVisibleEvent;
  214.     FMaxTextWidth, FMinTextWidth, FLeftMargin, FRightMargin, FTopMargin, FBottomMargin: Integer;
  215.     FRVFOptions: TRVFOptions;
  216.     FRVFWarnings: TRVFWarnings;
  217.     {$IFDEF RV_ODHC}
  218.     FOnDocumentHeightChange: TNotifyEvent;
  219.     {$ENDIF}
  220.     FOnCopy: TNotifyEvent;
  221.     FOnHTMLSaveImage: TRVHTMLSaveImageEvent;
  222.     FOnSaveImage2: TRVSaveImageEvent2;
  223.     FRTFReadProperties: TRVRTFReaderProperties;
  224.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  225.     FSmartPopupProperties: TRVSmartPopupProperties;
  226.     FOnSmartPopupClick: TRVSmartPopupClickEvent;
  227.     {$ENDIF}
  228.     FRVFTextStylesReadMode: TRVFReaderStyleMode;
  229.     FRVFParaStylesReadMode: TRVFReaderStyleMode;
  230.     FOnReadHyperlink: TRVReadHyperlink;
  231.     FOnWriteHyperlink: TRVWriteHyperlink;
  232.     FOnSaveRTFExtra: TRVSaveRTFExtraEvent;
  233.     FOnSaveHTMLExtra: TRVSaveHTMLExtraEvent;
  234.     FOnSaveParaToHTML: TRVSaveParaToHTMLEvent;    
  235.     FOnPaint: TRVPaintEvent;
  236.     FOnImportPicture: TRVImportPictureEvent;
  237.     FOnItemHint: TRVItemHintEvent;
  238.     FDocProperties: TStringList;
  239.     FOnProgress: TRVProgressEvent;
  240.     {$IFNDEF RVDONOTUSELIVESPELL}
  241.     FOnSpellingCheck: TRVSpellingCheckEvent;
  242.     FLiveSpellingMode: TRVLiveSpellingMode;
  243.     {$IFDEF RVLIVESPELLEXEVENT}
  244.     FOnSpellingCheckEx: TRVSpellingCheckExEvent;
  245.     {$ENDIF}
  246.     {$ENDIF}
  247.     {$IFNDEF RVDONOTUSEANIMATION}
  248.     FAnimationMode: TRVAnimationMode;
  249.     {$ENDIF}
  250.     {$IFDEF RICHVIEWDEF3}
  251.     FVAlign: TTextLayout;
  252.     {$ENDIF}
  253.     {$IFDEF RICHVIEWDEF5}
  254.     procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;
  255.     {$ENDIF}
  256.     procedure WMSize(var Message: TWMSize); message WM_SIZE;
  257.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  258.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  259.     procedure WMCopy(var Message: TWMCopy); message WM_COPY;
  260.     procedure WMTimer(var Message: TWMTimer); message WM_TIMER;
  261.     procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
  262.     procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
  263.     procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
  264.     procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
  265.     procedure WMRVEvent(var Message: TMessage); message WM_RVEVENT;
  266.     procedure WMRVDragDrop(var Message: TMessage); message WM_RVDRAGDROP;
  267.     {$IFNDEF RVDONOTUSELINEARPOSITIONS}
  268.     procedure EMGetSel(var Message: TMessage); message EM_GETSEL;
  269.     procedure EMSetSel(var Message: TMessage); message EM_SETSEL;
  270.     procedure EMGetTextRange(var Message: TMessage); message EM_GETTEXTRANGE;
  271.     {$IFNDEF RICHVIEWDEF9}
  272.     procedure WMGetTextLength(var Message: TMessage); message WM_GETTEXTLENGTH;
  273.     procedure WMGetText(var Message: TMessage); message WM_GETTEXT;
  274.     procedure WMSetText(var Message: TMessage); message WM_SETTEXT;
  275.     {$ENDIF}        
  276.     {$ENDIF}
  277.     {$IFNDEF RVDONOTUSEANIMATION}
  278.     procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  279.     {$ENDIF}
  280.     function GetLineCount: Integer;
  281.     function GetAllowSelection: Boolean;
  282.     function GetSingleClick: Boolean;
  283.     procedure SetAllowSelection(const Value: Boolean);
  284.     procedure SetSingleClick(const Value: Boolean);
  285.     procedure DoOnBackBitmapChange(Sender: TObject);
  286.     function GetPageBreaksBeforeItems(Index: Integer): Boolean;
  287.     procedure SetPageBreaksBeforeItems(Index: Integer;  Value: Boolean);
  288.     function GetDocumentHeight: Integer;
  289.     function GetFirstJumpNo: Integer;
  290.     procedure SetFirstJumpNo(Value: Integer);
  291.     procedure SetTabNavigation(const Value: TRVTabNavigationType);
  292.     procedure SetRTFReadProperties(const Value: TRVRTFReaderProperties);
  293.     function StoreDelimiters: Boolean;
  294.     procedure SetDocProperties(const Value: TStringList);
  295.     {$IFNDEF RVDONOTUSELIVESPELL}
  296.     procedure DoClearLiveSpellingResults;
  297.     procedure ClearItemLiveSpellingResults(RVData: TCustomRVData; ItemNo: Integer;
  298.       var UserData1: Integer; const UserData2: String; var ContinueEnum: Boolean);
  299.     procedure LiveSpellingValidateWordInItem(RVData: TCustomRVData; ItemNo: Integer;
  300.       var UserData1: Integer; const UserData2: String; var ContinueEnum: Boolean);
  301.     {$ENDIF}
  302.     procedure FullInvalidate;
  303.     {$IFNDEF RVDONOTUSEANIMATION}
  304.     procedure SetAnimationMode(const Value: TRVAnimationMode);
  305.     procedure KillAnimators;
  306.     {$ENDIF}
  307.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  308.     function GetSmartPopupProperties: TRVSmartPopupProperties;
  309.     procedure SetSmartPopupProperties(
  310.       const Value: TRVSmartPopupProperties);
  311.     function GetSmartPopupVisible: Boolean;
  312.     procedure SetSmartPopupVisible(const Value: Boolean);
  313.     {$ENDIF}    
  314.     {$IFDEF RVDEBUG}{$I DebugDebPropDef.inc}{$ENDIF}
  315.   protected
  316.     { Protected declarations }
  317.     VScrollDelta, HScrollDelta: Integer;
  318.     FOnSelect: TNotifyEvent;
  319.     FStyle: TRVStyle;
  320.     imgSavePrefix: String;
  321.     SaveOptions: TRVSaveOptions;
  322.     CurrentFileColor: TColor;
  323.     {$IFNDEF RVDONOTUSELIVESPELL}
  324.     FWordEnumThread: TRVWordEnumThread;
  325.     {$ENDIF}
  326.     procedure AdjustPopupMenuPos(var pt: TPoint); dynamic;  
  327.     procedure SetBiDiModeRV(const Value: TRVBiDiMode); override;
  328.     procedure SetVSmallStep(Value: Integer); override;
  329.     procedure Paint; override;
  330.     function GetColor: TColor;
  331.     function GetHoverColor(Color: TColor):TColor;
  332.     function IsCopyShortcut(Shift: TShiftState; Key: Word): Boolean;
  333.     function IsCutShortcut(Shift: TShiftState; Key: Word): Boolean;
  334.     function IsPasteShortcut(Shift: TShiftState; Key: Word): Boolean;
  335.     procedure DblClick; override;
  336.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  337.     procedure ClearTemporal; virtual;
  338.     function GetFirstItemVisible: Integer;
  339.     function GetLastItemVisible: Integer;
  340.     function GetBackBitmap: TBitmap;
  341.     procedure SetBackBitmap(Value: TBitmap);
  342.     procedure SetBackgroundStyle(Value: TBackgroundStyle);
  343.     function GetBackgroundStyle: TBackgroundStyle;
  344.     procedure Notification(AComponent: TComponent; Operation: TOperation);override;
  345.     procedure Loaded; override;
  346.     function CompareTags(Tag1, Tag2: Integer): Boolean;
  347.     procedure SetStyle(Value: TRVStyle); virtual;
  348.     procedure AfterVScroll; override;
  349.     procedure InplaceRedrawing(AllowRedrawItself: Boolean); virtual;
  350.     procedure AfterHScroll; override;
  351.     procedure GenerateMouseMove;
  352.     procedure Format_(OnlyResized,ForceFormat:Boolean; Canvas: TCanvas;
  353.           OnlyTail, NoCaching, Reformatting: Boolean);
  354.     function GetDataClass: TRichViewRVDataClass; virtual;
  355.     function GetTabNavigation:TRVTabNavigationType;
  356.     function GetRTFReadProperties: TRVRTFReaderProperties; virtual;
  357.     procedure AfterCreateWnd1; override;
  358.     procedure AfterCreateWnd2; override;
  359.     procedure SetName(const NewName: TComponentName); override;
  360.     {$IFNDEF RVDONOTUSELIVESPELL}
  361.     procedure ResumeLiveSpelling;
  362.     {$ENDIF}
  363.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  364.     procedure ShowSmartPopup;
  365.     procedure HideSmartPopup;
  366.     procedure SetSmartPopupTarget; dynamic;
  367.     {$ENDIF}    
  368.     { obsolete properties }
  369.     property AllowSelection: Boolean read GetAllowSelection write SetAllowSelection stored False;
  370.     property SingleClick   : Boolean read GetSingleClick    write SetSingleClick    stored False;
  371.     property OnPaint: TRVPaintEvent  read FOnPaint          write FOnPaint;
  372.   public
  373.     { Should be protected. Do not use! }
  374.     RVData: TRichViewRVData;
  375.     Flags : TRVFlags;
  376.     Background: TRVBackground;
  377.     imgSaveNo: Integer;
  378.     CurPictureInvalid: Boolean;
  379.     property Canvas;
  380.     procedure SelectNext_(GoForward: Boolean);
  381.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
  382.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  383.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
  384.     procedure ActivateScrollTimer(Slow: Boolean);
  385.     procedure DeactivateScrollTimer;
  386.     function RTFReaderAssigned: Boolean; dynamic;
  387.     procedure AssignEvents(Source: TCustomRichView);
  388.     { Public declarations }
  389.     constructor Create(AOwner: TComponent); override;
  390.     destructor Destroy; override;
  391.     procedure GetTabOrderList(List: TList); override;
  392.     procedure AssignSoftPageBreaks(RVPrint: TComponent);
  393.     procedure ClearSoftPageBreaks;
  394.     { add... methods: }
  395.     procedure AddItem(const Text: String; Item: TCustomRVItemInfo);
  396.     procedure AddNL(const s: String; StyleNo, ParaNo: Integer);
  397.     procedure AddFmt(const FormatStr: String; const Args: array of const;
  398.                      StyleNo, ParaNo: Integer);
  399.     procedure Add(const s: String; StyleNo:Integer);
  400.     procedure AddTextNL(const s: String; StyleNo, FirstParaNo, OtherParaNo: Integer);
  401.     procedure AddTextNLA(const s: String; StyleNo, FirstParaNo, OtherParaNo: Integer);
  402.     procedure AddTextBlockNL(s: String; StyleNo, ParaNo: Integer);
  403.     {$IFNDEF RVDONOTUSETABS}
  404.     procedure AddTab(TextStyleNo, ParaNo: Integer);
  405.     {$ENDIF}
  406.     procedure AddBreak;
  407.     function AddCheckpoint: Integer; { returns cp # }
  408.     function AddNamedCheckpoint(CpName: String): Integer; { returns cp # }
  409.     function AddNamedCheckpointEx(const CpName: String; RaiseEvent: Boolean): Integer; { returns cp # }
  410.     procedure AddPictureEx(const Name: String; gr: TGraphic; ParaNo: Integer;
  411.                            VAlign: TRVVAlign);
  412.     procedure AddHotPicture(const Name: String; gr: TGraphic; ParaNo: Integer;
  413.                            VAlign: TRVVAlign);
  414.     procedure AddHotspotEx(const Name: String; ImageIndex, HotImageIndex: Integer;
  415.                            ImageList: TCustomImageList; ParaNo: Integer);
  416.     procedure AddBulletEx (const Name: String; ImageIndex: Integer;
  417.                            ImageList: TCustomImageList; ParaNo: Integer);
  418.     procedure AddControlEx(const Name: String; ctrl: TControl;
  419.                            ParaNo: Integer; VAlign: TRVVAlign);
  420.     procedure AddBreakEx(Width: Byte; Style: TRVBreakStyle; Color: TColor);
  421.     {$IFDEF RVDEBUG}{$I DebugDebPropDef2.inc}{$ENDIF}
  422.     { add...tag methods: }
  423.     procedure AddNLTag(const s: String; StyleNo, ParaNo, Tag: Integer);
  424.     procedure AddTag(const s: String;StyleNo,Tag:Integer);
  425.     procedure AddBreakTag(Tag:Integer);
  426.     function AddCheckpointTag(Tag: Integer): Integer; { returns cp # }
  427. //    function AddNamedCheckpointTag(const CpName: String; Tag: Integer): Integer; { returns cp # }
  428.     function AddNamedCheckpointExTag(const CpName: String; RaiseEvent: Boolean;
  429.                                     Tag: Integer): Integer; { returns cp # }
  430.     procedure AddPictureExTag(const Name: String; gr: TGraphic; ParaNo: Integer;
  431.                               VAlign: TRVVAlign; Tag: Integer);
  432.     procedure AddHotPictureTag(const Name: String; gr: TGraphic; ParaNo: Integer;
  433.                               VAlign: TRVVAlign; Tag: Integer);
  434.     procedure AddHotspotExTag(const Name: String; ImageIndex, HotImageIndex: Integer;
  435.                               ImageList: TCustomImageList; ParaNo,Tag: Integer);
  436.     procedure AddBulletExTag (const Name: String; ImageIndex: Integer;
  437.                               ImageList: TCustomImageList; ParaNo,Tag: Integer);
  438.     procedure AddControlExTag(const Name: String; ctrl: TControl;
  439.                               ParaNo: Integer; VAlign: TRVVAlign; Tag: Integer);
  440.     procedure AddBreakExTag(Width: Byte; Style: TRVBreakStyle;
  441.                             Color: TColor; Tag: Integer);
  442.     { add... methods for backward compatibility: }
  443.     procedure AddFromNewLine(const s: String;StyleNo:Integer);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  444.     procedure AddCenterLine(const s: String;StyleNo:Integer);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  445.     procedure AddText(const s: String;StyleNo:Integer);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  446.     procedure AddTextFromNewLine(const s: String;StyleNo:Integer);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  447.     procedure AddPicture(gr: TGraphic);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  448.     procedure AddHotspot(ImageIndex: Integer; ImageList: TCustomImageList;
  449.                          fromnewline: Boolean);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  450.     procedure AddBullet (ImageIndex: Integer; ImageList: TCustomImageList;
  451.                          fromnewline: Boolean);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  452.     procedure AddControl(ctrl: TControl; center: Boolean);  {$IFDEF RICHVIEWDEF6}deprecated;{$ENDIF}
  453.     // checkpoint methods:
  454.     function GetCheckpointY(no: Integer): Integer;
  455.     function GetFirstCheckpoint: TCheckpointData;
  456.     function GetNextCheckpoint(CheckpointData: TCheckpointData): TCheckpointData;
  457.     function GetLastCheckpoint: TCheckpointData;
  458.     function GetPrevCheckpoint(CheckpointData: TCheckpointData): TCheckpointData;
  459.     function GetItemCheckpoint(ItemNo: Integer):TCheckpointData;
  460.     function FindCheckpointByName(const Name: String): TCheckpointData;
  461.     function FindCheckpointByTag(Tag: Integer): TCheckpointData;
  462.     function GetCheckpointByNo(No: Integer): TCheckpointData;
  463.     procedure GetCheckpointInfo(CheckpointData: TCheckpointData;
  464.                                 var Tag: Integer; var Name: String;
  465.                                 var RaiseEvent: Boolean);
  466.     procedure GetCheckpointXY(CheckpointData: TCheckpointData; var X,Y: Integer);
  467.     function GetCheckpointYEx(CheckpointData: TCheckpointData): Integer;
  468.     function GetCheckpointItemNo(CheckpointData: TCheckpointData): Integer;
  469.     function GetCheckpointNo(CheckpointData: TCheckpointData): Integer;
  470.     function GetJumpPointY(id: Integer): Integer;
  471.     function GetJumpPointItemNo(id: Integer): Integer;
  472.     procedure GetJumpPointLocation(id: Integer; var RVData: TCustomRVFormattedData; var ItemNo: Integer);
  473.     function GetItemCoords(ItemNo: Integer;var Left,Top: Integer): Boolean;
  474.     function GetItemClientCoords(ItemNo: Integer;var Left,Top: Integer): Boolean;
  475.     procedure Clear;
  476.     procedure Format;
  477.     procedure Reformat;
  478.     procedure FormatTail;
  479.     procedure AppendFrom(Source: TCustomRichView);
  480.     {$IFNDEF RVDONOTUSEHTML}
  481.     function SaveHTMLToStreamEx(Stream: TStream;
  482.                         const Path, Title, ImagesPrefix, ExtraStyles,
  483.                         ExternalCSS, CPPrefix: String;
  484.                         Options: TRVSaveOptions):Boolean;
  485.     function SaveHTMLToStream(Stream: TStream; const Path, Title,ImagesPrefix: String;
  486.                         Options: TRVSaveOptions):Boolean;
  487.     function SaveHTMLEx(const FileName, Title, ImagesPrefix, ExtraStyles,
  488.                         ExternalCSS, CPPrefix: String;
  489.                         Options: TRVSaveOptions):Boolean;
  490.     function SaveHTML(const FileName,Title,ImagesPrefix: String;
  491.                         Options: TRVSaveOptions):Boolean;
  492.     {$ENDIF}
  493.     function SaveText(const FileName: String; LineWidth: Integer):Boolean;
  494.     function SaveTextToStream(const Path: String; Stream: TStream;
  495.                         LineWidth: Integer;
  496.                         SelectionOnly, TextOnly: Boolean):Boolean;
  497.     function LoadText(const FileName: String; StyleNo, ParaNo: Integer;
  498.       AsSingleParagraph: Boolean):Boolean;
  499.     function LoadTextFromStream(Stream: TStream; StyleNo, ParaNo: Integer;
  500.       AsSingleParagraph: Boolean):Boolean;
  501.     {$IFNDEF RVDONOTUSERVF}
  502.     function CreateLayoutInfo: TRVLayoutInfo;
  503.     procedure ApplyLayoutInfo (Layout: TRVLayoutInfo); dynamic;
  504.     function LoadRVFFromStream(Stream: TStream):Boolean;
  505.     function InsertRVFFromStream(Stream: TStream; Index: Integer):Boolean;
  506.     function AppendRVFFromStream(Stream: TStream; ParaNo: Integer):Boolean;
  507.     function LoadRVF(const FileName: String):Boolean;
  508.     function SaveRVFToStream(Stream: TStream; SelectionOnly: Boolean):Boolean;
  509.     function SaveRVF(const FileName: String; SelectionOnly: Boolean):Boolean;
  510.     procedure CopyRVF;
  511.     {$ENDIF}
  512.     {$IFNDEF RVDONOTUSERTF}
  513.     function SaveRTFToStream(Stream: TStream; SelectionOnly: Boolean):Boolean;
  514.     function SaveRTF(const FileName: String; SelectionOnly: Boolean):Boolean;
  515.     procedure CopyRTF;
  516.     {$ENDIF}
  517.     {$IFNDEF RVDONOTUSERTFIMPORT}
  518.     function LoadRTFFromStream(Stream: TStream):Boolean;
  519.     function LoadRTF(const FileName: String):Boolean;
  520.     {$IFDEF RVUSEWORDDOC}
  521.     function LoadWordDoc(const FileName: String):Boolean;
  522.     {$ENDIF}
  523.     {$ENDIF}
  524.     function LoadFromStream(Stream: TStream; IsTextUnicode: TRVYesNoAuto): Boolean;
  525.     procedure AddNLATag(const s: String; StyleNo, ParaNo, Tag: Integer);
  526.     {$IFNDEF RVDONOTUSEUNICODE}
  527.     function SaveTextW(const FileName: String; LineWidth: Integer):Boolean;
  528.     function SaveTextToStreamW(const Path: String; Stream: TStream;
  529.                         LineWidth: Integer;
  530.                         SelectionOnly, TextOnly: Boolean):Boolean;
  531.     function LoadTextW(const FileName: String; StyleNo, ParaNo: Integer;
  532.       DefAsSingleParagraph: Boolean):Boolean;
  533.     function LoadTextFromStreamW(Stream: TStream; StyleNo, ParaNo: Integer;
  534.       DefAsSingleParagraph: Boolean):Boolean;
  535.     procedure SetItemTextA(ItemNo: Integer; const s: String);
  536.     {$IFDEF RICHVIEWCBDEF3}
  537.     procedure AddNLWTag(const s: WideString; StyleNo, ParaNo, Tag: Integer);
  538.     procedure AddTextNLW(const s: WideString; StyleNo, FirstParaNo, OtherParaNo: Integer;
  539.                          DefAsSingleParagraph: Boolean);
  540.     function GetSelTextW: WideString;
  541.     function GetItemTextW(ItemNo: Integer): WideString;
  542.     procedure SetItemTextW(ItemNo: Integer; const s: WideString);
  543.     {$ENDIF}
  544.     {$ENDIF}
  545.     function GetItemTextA(ItemNo: Integer): String;
  546.     procedure DeleteSection(const CpName: String);
  547.     procedure DeleteItems(FirstItemNo, Count: Integer);
  548.     procedure DeleteParas(FirstItemNo, LastItemNo: Integer);
  549.     procedure CopyText;
  550.     procedure CopyTextW;
  551.     procedure CopyImage;
  552.     procedure Copy;
  553.     function CopyDef: Boolean;
  554.     function GetSelectedImage: TGraphic;
  555.     function GetSelText: String;
  556.     function SelectionExists: Boolean;
  557.     procedure Deselect;
  558.     procedure SelectAll;
  559.     function SearchText(const s: String; SrchOptions: TRVSearchOptions): Boolean;
  560.     function GetItemStyle(ItemNo: Integer): Integer;
  561.     procedure GetBreakInfo(ItemNo: Integer; var AWidth: Byte;
  562.                             var AStyle: TRVBreakStyle; var AColor: TColor;
  563.                             var ATag: Integer);
  564.     procedure GetBulletInfo(ItemNo: Integer; var AName: String;
  565.                             var AImageIndex: Integer;
  566.                             var AImageList: TCustomImageList;
  567.                             var ATag: Integer);
  568.     procedure GetHotspotInfo(ItemNo: Integer; var AName: String;
  569.                             var AImageIndex, AHotImageIndex: Integer;
  570.                             var AImageList: TCustomImageList;
  571.                             var ATag: Integer);
  572.     procedure GetPictureInfo(ItemNo: Integer; var AName: String;
  573.                             var Agr: TGraphic; var AVAlign: TRVVAlign;
  574.                             var ATag: Integer);
  575.     procedure GetControlInfo(ItemNo: Integer; var AName: String;
  576.                             var Actrl: TControl; var AVAlign: TRVVAlign;
  577.                             var ATag: Integer);
  578.     procedure GetTextInfo(ItemNo: Integer; var AText: String;
  579.                             var ATag: Integer);
  580.     function GetItemTag(ItemNo: Integer): Integer;
  581.     procedure SetItemText(ItemNo: Integer; const s: String);
  582.     function GetItemText(ItemNo: Integer): String;
  583.     function SetItemExtraIntProperty(ItemNo: Integer; Prop: TRVExtraItemProperty;
  584.       Value: Integer): Boolean;
  585.     function GetItemExtraIntProperty(ItemNo: Integer; Prop: TRVExtraItemProperty;
  586.       var Value: Integer): Boolean;
  587.     function SetItemExtraStrProperty(ItemNo: Integer; Prop: TRVExtraItemStrProperty;
  588.       const Value: String): Boolean;
  589.     function GetItemExtraStrProperty(ItemNo: Integer; Prop: TRVExtraItemStrProperty;
  590.       var Value: String): Boolean;
  591.     function IsParaStart(ItemNo: Integer): Boolean;
  592.     function GetItemPara(ItemNo: Integer): Integer;
  593.     function IsFromNewLine(ItemNo: Integer): Boolean;
  594.     procedure SetBreakInfo(ItemNo: Integer; AWidth: Byte;
  595.                             AStyle: TRVBreakStyle; AColor: TColor;
  596.                             ATag: Integer);
  597.     procedure SetBulletInfo(ItemNo: Integer; const AName: String;
  598.                             AImageIndex: Integer;
  599.                             AImageList: TCustomImageList;
  600.                             ATag: Integer);
  601.     procedure SetHotspotInfo(ItemNo: Integer; const AName: String;
  602.                             AImageIndex, AHotImageIndex: Integer;
  603.                             AImageList: TCustomImageList;
  604.                             ATag: Integer);
  605.     // ret value: reformatting needed
  606.     function SetPictureInfo(ItemNo: Integer; const  AName: String;
  607.                             Agr: TGraphic; AVAlign: TRVVAlign;
  608.                             ATag: Integer): Boolean;
  609.     function SetControlInfo(ItemNo: Integer; const AName: String;
  610.                             AVAlign: TRVVAlign; ATag: Integer): Boolean;
  611.     procedure SetItemTag(ItemNo: Integer; ATag: Integer);
  612.     procedure SetCheckpointInfo(ItemNo: Integer; ATag: Integer;
  613.                                 const AName: String;
  614.                                 ARaiseEvent: Boolean);
  615.     function RemoveCheckpoint(ItemNo: Integer): Boolean;
  616.     function FindControlItemNo(actrl: TControl): Integer;
  617.     function SelectControl(actrl: TControl): Boolean;
  618.     procedure GetSelectionBounds(var StartItemNo, StartItemOffs,
  619.                                  EndItemNo, EndItemOffs: Integer;
  620.                                  Normalize: Boolean);
  621.     procedure SetSelectionBounds(StartItemNo, StartItemOffs,
  622.                                  EndItemNo, EndItemOffs: Integer);
  623.     procedure GetWordAt(X,Y: Integer; var RVData: TCustomRVFormattedData; var ItemNo: Integer; var Word: String); {$IFDEF RICHVIEWDEF4}overload;
  624.     function GetWordAt(X,Y: Integer): String; overload;{$ENDIF}
  625.     procedure SelectWordAt(X,Y: Integer);
  626.     procedure UpdatePaletteInfo; override;
  627.     function GetOffsBeforeItem(ItemNo: Integer): Integer;
  628.     function GetOffsAfterItem(ItemNo: Integer): Integer;
  629.     procedure SetAddParagraphMode(AllowNewPara: Boolean);
  630.     function SavePicture(DocumentSaveFormat: TRVSaveFormat; const Path: String;
  631.       gr: TGraphic): String; virtual;
  632.     function GetSelectionRect: TRect;
  633.     function GetItem(ItemNo: Integer): TCustomRVItemInfo;
  634.     function GetItemNo(Item: TCustomRVItemInfo): Integer;
  635.     procedure GetFocusedItem(var ARVData: TCustomRVFormattedData; var AItemNo: Integer);
  636.     procedure MarkStylesInUse(Data: TRVDeleteUnusedStylesData);
  637.     procedure DeleteMarkedStyles(Data: TRVDeleteUnusedStylesData);
  638.     procedure DeleteUnusedStyles(TextStyles, ParaStyles, ListStyles: Boolean);
  639.     {$IFNDEF RVDONOTUSEDRAGDROP}
  640.     procedure BeginOleDrag;
  641.     {$ENDIF}
  642.     {$IFNDEF RVDONOTUSELISTS}
  643.     function SetListMarkerInfo(AItemNo, AListNo, AListLevel, AStartFrom,
  644.       AParaNo: Integer; AUseStartFrom: Boolean): Integer;
  645.     procedure RemoveListMarker(ItemNo: Integer);
  646.     function GetListMarkerInfo(AItemNo: Integer; var AListNo, AListLevel,
  647.       AStartFrom: Integer; var AUseStartFrom: Boolean): Integer;
  648.     procedure RefreshListMarkers;
  649.     {$ENDIF}
  650.     function GetLineNo(ItemNo, ItemOffs: Integer): Integer;
  651.     function GetItemAt(X,Y: Integer; var RVData: TCustomRVFormattedData; var ItemNo, OffsetInItem: Integer;
  652.       Strict: Boolean): Boolean;
  653.     function ClientToDocument(const APoint: TPoint): TPoint;
  654.     {$IFNDEF RVDONOTUSELIVESPELL}
  655.     procedure StartLiveSpelling;
  656.     procedure ClearLiveSpellingResults;
  657.     procedure LiveSpellingValidateWord(const AWord: String);
  658.     procedure LaterSetBackLiveSpellingTo(RVData: TCustomRVData; ItemNo, Offs: Integer);
  659.     procedure RemoveRVDataFromLiveSpelling(RVData: TCustomRVData);
  660.     procedure AdjustLiveSpellingOnKeyPress(RVData: TCustomRVData; ItemNo, Index: Integer;
  661.       ch: Char);
  662.     procedure AdjustLiveSpellingOnDelete(RVData: TCustomRVData;
  663.       ItemNo, Index, Count: Integer);
  664.     procedure LiveSpellingCheckCurrentItem(RVData: TCustomRVData; ItemNo: Integer);
  665.     {$ENDIF}
  666.     {$IFNDEF RVDONOTUSEANIMATION}
  667.     procedure StartAnimation;
  668.     procedure StopAnimation;
  669.     {$ENDIF}
  670.     property LineCount: Integer read GetLineCount;
  671.     property ItemCount: Integer read GetLineCount;
  672.     property FirstItemVisible: Integer read GetFirstItemVisible;
  673.     property LastItemVisible: Integer read GetLastItemVisible;
  674.     property RVFWarnings: TRVFWarnings read FRVFWarnings write FRVFWarnings;
  675.     property DocumentHeight: Integer read GetDocumentHeight;
  676.     property PageBreaksBeforeItems[Index: Integer]: Boolean
  677.       read GetPageBreaksBeforeItems write SetPageBreaksBeforeItems;
  678.     property BackgroundBitmap: TBitmap   read GetBackBitmap write SetBackBitmap;
  679.     property BackgroundStyle: TBackgroundStyle read GetBackgroundStyle write SetBackgroundStyle;
  680.     property BottomMargin: Integer       read FBottomMargin write FBottomMargin default 5;
  681.     property Color default clNone;
  682.     property CPEventKind : TCPEventKind  read FCPEventKind  write FCPEventKind;
  683.     property Cursor: TCursor read FCursor write FCursor;
  684.     property Delimiters  : String        read FDelimiters   write FDelimiters stored StoreDelimiters;
  685.     property DoInPaletteMode;
  686.     property FirstJumpNo    : Integer               read GetFirstJumpNo   write SetFirstJumpNo default 0;
  687.     property FullRedraw;
  688.     property HScrollVisible;
  689.     property HScrollMax;
  690.     property HScrollPos;
  691.     property InplaceEditor;
  692.     property LeftMargin  : Integer       read FLeftMargin   write FLeftMargin default 5;
  693.     {$IFNDEF RVDONOTUSELIVESPELL}
  694.     property LiveSpellingMode: TRVLiveSpellingMode  read FLiveSpellingMode write FLiveSpellingMode default rvlspManualStart;
  695.     {$ENDIF}
  696.     {$IFNDEF RVDONOTUSEANIMATION}
  697.     property AnimationMode: TRVAnimationMode read FAnimationMode write SetAnimationMode default rvaniManualStart;
  698.     {$ENDIF}
  699.     property MaxTextWidth: Integer       read FMaxTextWidth write FMaxTextWidth default 0;
  700.     property MinTextWidth: Integer       read FMinTextWidth write FMinTextWidth default 0;
  701.     property Options     : TRVOptions    read FOptions      write FOptions
  702.              default [rvoAllowSelection, rvoScrollToEnd, rvoAutoCopyText,
  703.                        rvoAutoCopyImage, rvoAutoCopyRVF, rvoAutoCopyRTF,
  704.                        rvoDblClickSelectsWord, rvoRClickDeselects,
  705.                        rvoFormatInvalidate,
  706.                        rvoShowPageBreaks, rvoFastFormatting];
  707.     property RightMargin : Integer       read FRightMargin  write FRightMargin default 5;
  708.     property RTFOptions  : TRVRTFOptions read FRTFOptions   write FRTFOptions default [rvrtfDuplicateUnicode, rvrtfSaveEMFAsWMF, rvrtfSaveJpegAsJpeg];
  709.     property RTFReadProperties: TRVRTFReaderProperties read GetRTFReadProperties write SetRTFReadProperties;
  710.     property RVFOptions  : TRVFOptions   read FRVFOptions   write FRVFOptions
  711.       default [rvfoSavePicturesBody, rvfoSaveControlsBody, rvfoSaveBinary,
  712.         rvfoSaveDocProperties, rvfoLoadDocProperties];
  713.     property RVFParaStylesReadMode: TRVFReaderStyleMode read FRVFParaStylesReadMode write FRVFParaStylesReadMode default rvf_sInsertMerge;
  714.     property RVFTextStylesReadMode: TRVFReaderStyleMode read FRVFTextStylesReadMode write FRVFTextStylesReadMode default rvf_sInsertMerge;
  715.     property Style       : TRVStyle      read FStyle        write SetStyle;
  716.     property TabNavigation: TRVTabNavigationType read GetTabNavigation write SetTabNavigation default rvtnTab;
  717.     property TopMargin   : Integer       read FTopMargin    write FTopMargin default 5;
  718.     property DocProperties: TStringList  read FDocProperties write SetDocProperties;
  719.     property VScrollMax;
  720.     property VScrollPos;
  721.     property VScrollVisible;
  722.     property VSmallStep;
  723.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  724.     property SmartPopupProperties: TRVSmartPopupProperties read GetSmartPopupProperties write SetSmartPopupProperties;
  725.     property SmartPopupVisible: Boolean read GetSmartPopupVisible write SetSmartPopupVisible;
  726.     {$ENDIF}
  727.     {$IFDEF RICHVIEWDEF3}
  728.     property VAlign         : TTextLayout           read FVAlign          write FVAlign default tlTop;
  729.     {$ENDIF}
  730.     property OnRVDblClick   : TRVDblClickEvent      read FOnRVDblClick    write FOnRVDblClick;
  731.     property OnCheckpointVisible: TRVCheckpointVisibleEvent read FOnCheckpointVisible write FOnCheckpointVisible;
  732.     property OnControlAction: TRVControlActionEvent read FOnControlAction write FOnControlAction;
  733.     property OnItemAction   : TRVItemActionEvent    read FOnItemAction    write FOnItemAction;
  734.     property OnCopy         : TNotifyEvent          read FOnCopy          write FOnCopy;
  735.     {$IFDEF RV_ODHC}
  736.     property OnDocumentHeightChange: TNotifyEvent read FOnDocumentHeightChange write FOnDocumentHeightChange;
  737.     {$ENDIF}
  738.     property OnImportPicture: TRVImportPictureEvent read FOnImportPicture write FOnImportPicture;
  739.     property OnItemHint: TRVItemHintEvent           read FOnItemHint      write FOnItemHint;
  740.     property OnJump         : TJumpEvent            read FOnJump          write FOnJump;
  741.     property OnHTMLSaveImage: TRVHTMLSaveImageEvent read FOnHTMLSaveImage write FOnHTMLSaveImage;
  742.     property OnSaveImage2: TRVSaveImageEvent2       read FOnSaveImage2    write FOnSaveImage2;
  743.     property OnReadHyperlink: TRVReadHyperlink      read FOnReadHyperlink write FOnReadHyperlink;
  744.     property OnWriteHyperlink: TRVWriteHyperlink    read FOnWriteHyperlink write FOnWriteHyperlink;
  745.     property OnURLNeeded    : TRVURLNeededEvent     read FOnURLNeeded     write FOnURLNeeded;
  746.     property OnRVMouseDown  : TRVMouseEvent         read FOnRVMouseDown   write FOnRVMouseDown;
  747.     property OnRVMouseMove  : TRVMouseMoveEvent     read FOnRVMouseMove   write FOnRVMouseMove;
  748.     property OnRVMouseUp    : TRVMouseEvent         read FOnRVMouseUp     write FOnRVMouseUp;
  749.     property OnRVRightClick : TRVRightClickEvent    read FOnRVRightClick  write FOnRVRightClick;
  750.     property OnRVFControlNeeded: TRVFControlNeededEvent read FOnRVFControlNeeded write FOnRVFControlNeeded;
  751.     property OnRVFImageListNeeded: TRVFImageListNeededEvent read FOnRVFImageListNeeded write FOnRVFImageListNeeded;
  752.     property OnRVFPictureNeeded: TRVFPictureNeededEvent read FOnRVFPictureNeeded write FOnRVFPictureNeeded;
  753.     property OnSaveComponentToFile: TRVSaveComponentToFileEvent read FOnSaveComponentToFile write FOnSaveComponentToFile;
  754.     property OnSaveItemToFile: TRVSaveItemToFileEvent read FOnSaveItemToFile write FOnSaveItemToFile;
  755.     property OnSelect       : TNotifyEvent          read FOnSelect        write FOnSelect;
  756.     property OnSaveRTFExtra: TRVSaveRTFExtraEvent   read FOnSaveRTFExtra  write FOnSaveRTFExtra;
  757.     property OnSaveHTMLExtra: TRVSaveHTMLExtraEvent read FOnSaveHTMLExtra write FOnSaveHTMLExtra;
  758.     property OnSaveParaToHTML: TRVSaveParaToHTMLEvent read FOnSaveParaToHTML write FOnSaveParaToHTML;
  759.     property OnProgress: TRVProgressEvent           read FOnProgress      write FOnProgress;
  760.     {$IFNDEF RVDONOTUSELIVESPELL}
  761.     property OnSpellingCheck: TRVSpellingCheckEvent read FOnSpellingCheck    write FOnSpellingCheck;
  762.     {$IFDEF RVLIVESPELLEXEVENT}
  763.     property OnSpellingCheckEx: TRVSpellingCheckExEvent read FOnSpellingCheckEx write FOnSpellingCheckEx;
  764.     {$ENDIF}
  765.     {$ENDIF}
  766.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  767.     property OnSmartPopupClick: TRVSmartPopupClickEvent read FOnSmartPopupClick write FOnSmartPopupClick;
  768.     {$ENDIF}
  769.   end;
  770.   { -------------------------------------------------------------------------- }
  771.   { TRichView: visual component, document viewer.
  772.     Component Palette page: "RichView".
  773.     This class publishes many inherited properties.                            }
  774.   TRichView = class (TCustomRichView)
  775.   published
  776.     { Published standard properties }
  777.     property Align;
  778.     {$IFDEF RICHVIEWDEF4}
  779.     property Anchors;
  780.     property Constraints;
  781.     {$ENDIF}
  782.     property Color default clNone;
  783.     property Ctl3D;
  784.     {$IFDEF RICHVIEWDEF4}
  785.     property DragKind;
  786.     {$ENDIF}    
  787.     property DragMode;
  788.     property Enabled;
  789.     property HelpContext;
  790.     property ParentCtl3D;
  791.     property ParentShowHint;
  792.     property PopupMenu;
  793.     property ShowHint;
  794.     property TabOrder;
  795.     property TabStop default True;
  796.     property UseXPThemes;
  797.     property Visible;
  798.     { Published standard events }
  799.     property OnClick;
  800.     {$IFDEF RICHVIEWDEF5}
  801.     property OnContextPopup;
  802.     {$ENDIF}
  803.     property OnDblClick;
  804.     property OnDragDrop;
  805.     property OnDragOver;
  806.     property OnEndDrag;
  807.     property OnEnter;
  808.     property OnExit;
  809.     property OnKeyDown;
  810.     property OnKeyPress;
  811.     property OnKeyUp;
  812.     property OnMouseMove;
  813.     {$IFDEF RICHVIEWDEF4}
  814.     property OnMouseWheel;
  815.     property OnMouseWheelDown;
  816.     property OnMouseWheelUp;
  817.     property OnResize;
  818.     {$ENDIF}
  819.     property OnStartDrag;
  820.     { Published RichView properties }
  821.     {$IFNDEF RVDONOTUSEANIMATION}
  822.     property AnimationMode;
  823.     {$ENDIF}
  824.     property BackgroundBitmap;
  825.     property BackgroundStyle default bsNoBitmap;
  826.     property BiDiMode;
  827.     property BorderStyle default bsSingle;
  828.     property BottomMargin;
  829.     property CPEventKind default cpeNone;
  830.     property Cursor default crDefault;
  831.     property Delimiters;
  832.     property DoInPaletteMode;
  833.     property FirstJumpNo;
  834.     property HScrollVisible;
  835.     property LeftMargin;
  836.     {$IFNDEF RVDONOTUSELIVESPELL}
  837.     //property LiveSpellingMode;
  838.     {$ENDIF}
  839.     property MaxTextWidth;
  840.     property MinTextWidth;
  841.     property Options;
  842.     property RightMargin;
  843.     property RTFOptions;
  844.     property RTFReadProperties;
  845.     property RVFOptions;
  846.     property RVFParaStylesReadMode;
  847.     property RVFTextStylesReadMode;
  848.     {$IFDEF RVFLATSCROLLBARS}
  849.     property ScrollBarColor;
  850.     property ScrollBarStyle;
  851.     {$ENDIF}
  852.     property Style;
  853.     property TabNavigation;
  854.     property TopMargin;
  855.     property Tracking;
  856.     {$IFDEF RICHVIEWDEF3}
  857.     property VAlign;
  858.     {$ENDIF}
  859.     property VScrollVisible;
  860.     {$IFDEF RICHVIEWDEF4}
  861.     property WheelStep;
  862.     {$ENDIF}
  863.     { Published RichView events }
  864.     property OnCheckpointVisible;
  865.     property OnControlAction;
  866.     property OnCopy;
  867.     {$IFDEF RV_ODHC}
  868.     property OnDocumentHeightChange;
  869.     {$ENDIF}
  870.     property OnImportPicture;
  871.     property OnItemAction;
  872.     property OnItemHint;
  873.     property OnJump;
  874.     property OnHScrolled;    
  875.     property OnHTMLSaveImage;
  876.     property OnPaint;
  877.     property OnProgress;
  878.     property OnReadHyperlink;
  879.     property OnRVDblClick;
  880.     property OnRVFImageListNeeded;
  881.     property OnRVFControlNeeded;
  882.     property OnRVFPictureNeeded;
  883.     property OnRVMouseDown;
  884.     property OnRVMouseMove;
  885.     property OnRVMouseUp;
  886.     property OnRVRightClick;
  887.     property OnSaveComponentToFile;
  888.     property OnSaveHTMLExtra;
  889.     property OnSaveImage2;
  890.     property OnSaveItemToFile;
  891.     property OnSaveRTFExtra;
  892.     property OnSelect;
  893.     {$IFNDEF RVDONOTUSELIVESPELL}
  894.     property OnSpellingCheck;
  895.     {$IFDEF RVLIVESPELLEXEVENT}
  896.     property OnSpellingCheckEx;
  897.     {$ENDIF}
  898.     {$ENDIF}
  899.     property OnVScrolled;
  900.     property OnWriteHyperlink;
  901.     { obsolete properties }
  902.     property AllowSelection;
  903.     property SingleClick;
  904.     property OnURLNeeded;
  905.   end;
  906. {------------------------------------------------------------------------------}
  907. implementation
  908. uses ShellApi, PtblRV,
  909.      {$IFNDEF RVDONOTUSELISTS}
  910.      RVMarker,
  911.      {$ENDIF}
  912.      {$IFNDEF RVDONOTUSELINEARPOSITIONS}
  913.      RVLinear,
  914.      {$ENDIF}
  915.      RVStr;
  916. {============================= TCustomRichView ======================================}
  917. {$IFDEF RVDEBUG}{$I DebugDecl.inc}{$ENDIF}
  918. constructor TCustomRichView.Create(AOwner: TComponent);
  919. begin
  920.   inherited Create(AOwner);
  921.   RVData := GetDataClass.Create(Self);
  922.   Cursor         := crDefault;
  923.   Color          := clNone;
  924.   FLeftMargin    := 5;
  925.   FRightMargin   := 5;
  926.   FTopMargin     := 5;
  927.   FBottomMargin  := 5;
  928.   FMaxTextWidth  := 0;
  929.   {$IFDEF RVDEBUG}{$I Debugl.inc}{$ENDIF}
  930.   FMinTextWidth  := 0;
  931.   FStyle         := nil;
  932.   Background     := TRVBackground.Create(True);
  933.   Background.Bitmap.OnChange := DoOnBackBitmapChange;
  934.   Width          := 100;
  935.   Height         := 40;
  936.   Flags          := [rvflUseJumps, rvflTrim, {rvflUseExternalLeading,} rvflRoot,
  937.     rvflCanUseCustomPPI, rvflCanProcessGetText];
  938.   FDelimiters    := RVDEFAULTDELIMITERS;
  939.   ScrollTimerActive := False;
  940.   FOptions       := [rvoAllowSelection, rvoScrollToEnd, rvoAutoCopyText,
  941.                      rvoAutoCopyImage, rvoAutoCopyRVF, rvoAutoCopyRTF,
  942.                      rvoDblClickSelectsWord, rvoRClickDeselects,
  943.                      rvoFormatInvalidate,
  944.                      rvoShowPageBreaks, rvoFastFormatting];
  945.   FRVFOptions    := [rvfoSavePicturesBody, rvfoSaveControlsBody, rvfoSaveBinary,
  946.     rvfoSaveDocProperties, rvfoLoadDocProperties];
  947.   FRTFOptions    := [rvrtfDuplicateUnicode, rvrtfSaveEMFAsWMF, rvrtfSaveJpegAsJpeg];
  948.   BorderStyle    := bsSingle;
  949.   FRVFTextStylesReadMode := rvf_sInsertMerge;
  950.   FRVFParaStylesReadMode := rvf_sInsertMerge;
  951.   FDocProperties := TStringList.Create;
  952.   {$IFNDEF RVDONOTUSELIVESPELL}
  953.   FLiveSpellingMode := rvlspManualStart;
  954.   {$ENDIF}
  955.   {$IFNDEF RVDONOTUSEANIMATION}
  956.   FAnimationMode := rvaniManualStart;
  957.   {$ENDIF}
  958. end;
  959. {------------------------------------------------------------------------------}
  960. function TCustomRichView.GetDataClass: TRichViewRVDataClass;
  961. begin
  962.   Result := TRichViewRVData;
  963. end;
  964. {------------------------------------------------------------------------------}
  965. destructor TCustomRichView.Destroy;
  966. begin
  967.   Destroying;
  968.   {
  969.   if Assigned(FWordEnumThread) then begin
  970.     FWordEnumThread.Finish;
  971.     FWordEnumThread.Reset(nil);
  972.     FWordEnumThread := nil;
  973.   end;
  974.   }
  975.   Background.Free;
  976.   Clear;
  977.   RVData.Free;
  978.   RTFReadProperties := nil;
  979.   FDocProperties.Free;
  980.   {$IFNDEF RVDONOTUSESMARTPOPUP}
  981.   FSmartPopupProperties.Free;
  982.   FSmartPopupProperties := nil;
  983.   {$ENDIF}  
  984.   inherited Destroy;
  985. end;
  986. {------------------------------------------------------------------------------}
  987. procedure TCustomRichView.GetTabOrderList(List: TList);
  988. var i: Integer;
  989. begin
  990.   inherited GetTabOrderList(List);
  991.   if TabNavigation<>rvtnNone then begin
  992.     for i := List.Count-1 downto 2 do
  993.       if TWinControl(List[i]).Parent=Self then
  994.         List.Insert(i,Self);
  995.     if List.Count>1 then
  996.       List.Add(Self);
  997.   end;
  998. end;
  999. {------------------------------------------------------------------------------}
  1000. procedure TCustomRichView.Notification(AComponent: TComponent; Operation: TOperation);
  1001. begin
  1002.   inherited Notification(AComponent, Operation);
  1003.   if (Operation=opRemove) then begin
  1004.     if (AComponent=FStyle) then
  1005.       Style := nil;
  1006.     {$IFNDEF RVDONOTUSESMARTPOPUP}
  1007.     if (FSmartPopupProperties<>nil) and (FSmartPopupProperties.ImageList=AComponent) then
  1008.       FSmartPopupProperties.ImageList := nil;
  1009.     if (FSmartPopupProperties<>nil) and (FSmartPopupProperties.Menu=AComponent) then
  1010.       FSmartPopupProperties.Menu := nil;
  1011.     {$ENDIF}
  1012.   end;
  1013. end;
  1014. {------------------------------------------------------------------------------}
  1015. procedure TCustomRichView.WMSize(var Message: TWMSize);
  1016. begin
  1017.   Format_(True, False, Canvas, False, False, False);
  1018.   inherited;
  1019. //  if Assigned(FOnResized) then FOnResized(Self);
  1020. end;
  1021. {------------------------------------------------------------------------------}
  1022. procedure TCustomRichView.Format;
  1023. begin
  1024.   Format_(False, True, Canvas, False, True, False);
  1025.   if rvoFormatInvalidate in Options then Invalidate;
  1026.   {$IFNDEF RVDONOTUSEANIMATION}
  1027.   if AnimationMode=rvaniOnFormat then
  1028.     StartAnimation;
  1029.   {$ENDIF}
  1030. end;
  1031. {------------------------------------------------------------------------------}
  1032. procedure TCustomRichView.Reformat;
  1033. begin
  1034.   Format_(True, True, Canvas, False, True, True);
  1035.   if rvoFormatInvalidate in Options then Invalidate;
  1036. end;
  1037. {------------------------------------------------------------------------------}
  1038. procedure TCustomRichView.FormatTail;
  1039. begin
  1040.   Format_(False, True, Canvas, True, True, False);
  1041.   if rvoFormatInvalidate in Options then Invalidate;
  1042. end;
  1043. {------------------------------------------------------------------------------}
  1044. procedure TCustomRichView.ClearTemporal;
  1045. begin
  1046.   DeactivateScrollTimer;
  1047.   RVData.ClearTemporal;
  1048. end;
  1049. {------------------------------------------------------------------------------}
  1050. procedure TCustomRichView.Deselect;
  1051. begin
  1052.   RVData.Deselect(nil, True);
  1053. end;
  1054. {------------------------------------------------------------------------------}
  1055. procedure TCustomRichView.SelectAll;
  1056. begin
  1057.   RVData.SelectAll;
  1058. end;
  1059. {------------------------------------------------------------------------------}
  1060. function TCustomRichView.GetOffsBeforeItem(ItemNo: Integer): Integer;
  1061. begin
  1062.   Result := RVData.GetOffsBeforeItem(ItemNo);
  1063. end;
  1064. {------------------------------------------------------------------------------}
  1065. function TCustomRichView.GetOffsAfterItem(ItemNo: Integer): Integer;
  1066. begin
  1067.   Result := RVData.GetOffsAfterItem(ItemNo);
  1068. end;
  1069. {------------------------------------------------------------------------------}
  1070. procedure TCustomRichView.Clear;
  1071. begin
  1072.   ClearTemporal;
  1073.   RVData.Clear;
  1074. end;
  1075. {------------------------------------------------------------------------------}
  1076. function TCustomRichView.GetFirstJumpNo: Integer;
  1077. begin
  1078.   Result := RVData.FirstJumpNo;
  1079. end;
  1080. {------------------------------------------------------------------------------}
  1081. procedure TCustomRichView.SetFirstJumpNo(Value: Integer);
  1082. begin
  1083.   RVData.FirstJumpNo := Value;
  1084. end;
  1085. {------------------------------------------------------------------------------}
  1086. procedure TCustomRichView.SetDocProperties(const Value: TStringList);
  1087. begin
  1088.   FDocProperties.Assign(Value);
  1089. end;
  1090. {------------------------------------------------------------------------------}
  1091. procedure TCustomRichView.AddNLTag(const s: String; StyleNo, ParaNo, Tag: Integer);
  1092. begin
  1093.   RVData.AddNLTag(s, StyleNo, ParaNo, Tag);
  1094. end;
  1095. {------------------------------------------------------------------------------}
  1096. procedure TCustomRichView.AddItem(const Text: String; Item: TCustomRVItemInfo);
  1097. begin
  1098.   RVData.AddItem(Text, Item);
  1099. end;
  1100. {------------------------------------------------------------------------------}
  1101. procedure TCustomRichView.AddNL(const s: String; StyleNo, ParaNo: Integer);
  1102. begin
  1103.   RVData.AddNL(s, StyleNo, ParaNo);
  1104. end;
  1105. {------------------------------------------------------------------------------}
  1106. procedure TCustomRichView.AddFmt(const FormatStr: String; const Args: array of const;
  1107.                            StyleNo, ParaNo: Integer);
  1108. begin
  1109.   RVData.AddFmt(FormatStr, Args, StyleNo, ParaNo);
  1110. end;
  1111. {------------------------------------------------------------------------------}
  1112. procedure TCustomRichView.AddFromNewLine(const s: String; StyleNo:Integer);
  1113. begin
  1114.   RVData.AddNLTag(s, StyleNo, 0, 0);
  1115. end;
  1116. {------------------------------------------------------------------------------}
  1117. procedure TCustomRichView.AddTag(const s: String; StyleNo,Tag:Integer);
  1118. begin
  1119.   RVData.AddNLTag(s, StyleNo, -1, Tag);
  1120. end;
  1121. {------------------------------------------------------------------------------}
  1122. procedure TCustomRichView.Add(const s: String; StyleNo:Integer);
  1123. begin
  1124.   RVData.AddNLTag(s, StyleNo, -1, 0);
  1125. end;
  1126. {------------------------------------------------------------------------------}
  1127. procedure TCustomRichView.AddText(const s: String;StyleNo:Integer);
  1128. begin
  1129.   RVData.AddTextNL(s, StyleNo, -1, 0);
  1130. end;
  1131. {------------------------------------------------------------------------------}
  1132. procedure TCustomRichView.AddTextFromNewLine(const s: String;StyleNo:Integer);
  1133. begin
  1134.   RVData.AddTextNL(s, StyleNo, 0, 0);
  1135. end;
  1136. {------------------------------------------------------------------------------}
  1137. procedure TCustomRichView.AddTextNL(const s: String; StyleNo, FirstParaNo, OtherParaNo : Integer);
  1138. begin
  1139.   RVData.AddTextNL(s, StyleNo, FirstParaNo, OtherParaNo);
  1140. end;
  1141. {------------------------------------------------------------------------------}
  1142. procedure TCustomRichView.AddTextNLA(const s: String; StyleNo, FirstParaNo,
  1143.   OtherParaNo: Integer);
  1144. begin
  1145.   {$IFNDEF RVDONOTUSEUNICODE}
  1146.   RVData.AddTextNLA(s, StyleNo, FirstParaNo, OtherParaNo);
  1147.   {$ELSE}
  1148.   RVData.AddTextNL(s, StyleNo, FirstParaNo, OtherParaNo);  
  1149.   {$ENDIF}
  1150. end;
  1151. {------------------------------------------------------------------------------}
  1152. procedure TCustomRichView.AddTextBlockNL(s: String; StyleNo, ParaNo: Integer);
  1153. begin
  1154.   RVData.AddTextBlockNL(s, StyleNo, ParaNo);
  1155. end;
  1156. {------------------------------------------------------------------------------}
  1157. {$IFNDEF RVDONOTUSETABS}
  1158. procedure TCustomRichView.AddTab(TextStyleNo, ParaNo: Integer);
  1159. begin
  1160.   RVData.AddTab(TextStyleNo, ParaNo);
  1161. end;
  1162. {$ENDIF}
  1163. {------------------------------------------------------------------------------}
  1164. {
  1165. procedure TCustomRichView.AddTextNLTag(s: String; StyleNo, ParaNo, Tag: Integer);
  1166. begin
  1167. end;
  1168. }
  1169. {------------------------------------------------------------------------------}
  1170. procedure TCustomRichView.AddCenterLine(const s: String;StyleNo:Integer);
  1171. begin
  1172.   RVData.AddNLTag(s, StyleNo, 1, 0);
  1173. end;
  1174. {------------------------------------------------------------------------------}
  1175. procedure TCustomRichView.AddBreakExTag(Width: Byte; Style: TRVBreakStyle; Color: TColor; Tag: Integer);
  1176. begin
  1177.   RVData.AddBreakExTag(Width,Style,Color,Tag);
  1178. end;
  1179. {------------------------------------------------------------------------------}
  1180. procedure TCustomRichView.AddBreakEx(Width: Byte; Style: TRVBreakStyle; Color: TColor);
  1181. begin
  1182.   RVData.AddBreakEx(Width,Style,Color);
  1183. end;
  1184. {------------------------------------------------------------------------------}
  1185. procedure TCustomRichView.AddBreakTag(Tag: Integer);
  1186. begin
  1187.   RVData.AddBreakTag(Tag);
  1188. end;
  1189. {------------------------------------------------------------------------------}
  1190. procedure TCustomRichView.AddBreak;
  1191. begin
  1192.   RVData.AddBreakTag(0);
  1193. end;
  1194. {------------------------------------------------------------------------------}
  1195. function TCustomRichView.AddNamedCheckpointExTag(const CpName: String;
  1196.                                            RaiseEvent: Boolean;
  1197.                                            Tag: Integer): Integer;
  1198. begin
  1199.   Result := RVData.AddNamedCheckpointExTag(CpName, RaiseEvent, Tag);
  1200. end;
  1201. {------------------------------------------------------------------------------}
  1202. {
  1203. function TCustomRichView.AddNamedCheckpointTag(const CpName: String; Tag: Integer): Integer;
  1204. begin
  1205.   Result := AddNamedCheckpointExTag(CpName, False, Tag);
  1206. end;
  1207. }
  1208. {------------------------------------------------------------------------------}
  1209. function TCustomRichView.AddNamedCheckpointEx(const CpName: String;
  1210.                                            RaiseEvent: Boolean): Integer;
  1211. begin
  1212.   Result := RVData.AddNamedCheckpointExTag(CpName, RaiseEvent, 0);
  1213. end;
  1214. {------------------------------------------------------------------------------}
  1215. function TCustomRichView.AddNamedCheckpoint(CpName: String): Integer;
  1216. begin
  1217.   Result := RVData.AddNamedCheckpointExTag(CpName, False, 0);
  1218. end;
  1219. {------------------------------------------------------------------------------}
  1220. function TCustomRichView.AddCheckpointTag(Tag: Integer): Integer;
  1221. begin
  1222.   Result := RVData.AddNamedCheckpointExTag('',False,Tag);
  1223. end;
  1224. {------------------------------------------------------------------------------}
  1225. function TCustomRichView.AddCheckpoint: Integer;
  1226. begin
  1227.   Result := RVData.AddNamedCheckpointExTag('',False,0);
  1228. end;
  1229. {------------------------------------------------------------------------------}
  1230. procedure TCustomRichView.AddHotspotExTag(const Name: String;
  1231.                                     ImageIndex, HotImageIndex: Integer;
  1232.                                     ImageList: TCustomImageList;
  1233.                                     ParaNo, Tag: Integer);
  1234. begin
  1235.   RVData.AddHotspotExTag(Name, ImageIndex, HotImageIndex, ImageList, ParaNo, Tag);
  1236. end;
  1237. {------------------------------------------------------------------------------}
  1238. procedure TCustomRichView.AddHotspotEx(const Name: String;
  1239.                                  ImageIndex, HotImageIndex: Integer;
  1240.                                  ImageList: TCustomImageList;
  1241.                                  ParaNo: Integer);
  1242. begin
  1243.   RVData.AddHotspotEx(Name, ImageIndex, HotImageIndex, ImageList, ParaNo);
  1244. end;
  1245. {------------------------------------------------------------------------------}
  1246. procedure TCustomRichView.AddHotspot(ImageIndex: Integer; ImageList: TCustomImageList;
  1247.                                fromnewline: Boolean);
  1248. begin
  1249.   if FromNewLine then
  1250.     RVData.AddHotspotExTag('', ImageIndex, ImageIndex, ImageList, 0, 0)
  1251.   else
  1252.     RVData.AddHotspotExTag('', ImageIndex, ImageIndex, ImageList, -1, 0);
  1253. end;
  1254. {------------------------------------------------------------------------------}
  1255. procedure TCustomRichView.AddBulletExTag(const Name: String; ImageIndex: Integer;
  1256.                                    ImageList: TCustomImageList;
  1257.                                    ParaNo, Tag: Integer);
  1258. begin
  1259.   RVData.AddBulletExTag(Name, ImageIndex, ImageList, ParaNo, Tag);
  1260. end;
  1261. {------------------------------------------------------------------------------}
  1262. procedure TCustomRichView.AddBulletEx(const Name: String; ImageIndex: Integer;
  1263.                                 ImageList: TCustomImageList;
  1264.                                 ParaNo: Integer);
  1265. begin
  1266.   RVData.AddBulletEx(Name, ImageIndex, ImageList, ParaNo);
  1267. end;
  1268. {------------------------------------------------------------------------------}
  1269. procedure TCustomRichView.AddBullet(ImageIndex: Integer; ImageList: TCustomImageList; fromnewline: Boolean);
  1270. begin
  1271.   if FromNewLine then
  1272.     RVData.AddBulletExTag('', ImageIndex, ImageList, 0, 0)
  1273.   else
  1274.     RVData.AddBulletExTag('', ImageIndex, ImageList, -1, 0);
  1275. end;
  1276. {------------------------------------------------------------------------------}
  1277. { "gr" does not copied, do not free it!}
  1278. procedure TCustomRichView.AddPictureExTag(const Name: String; gr: TGraphic;
  1279.                                     ParaNo: Integer; VAlign: TRVVAlign; Tag: Integer);
  1280. begin
  1281.   RVData.AddPictureExTag(Name, gr, ParaNo, VAlign, Tag);
  1282. end;
  1283. {------------------------------------------------------------------------------}
  1284. procedure TCustomRichView.AddPictureEx(const Name: String; gr: TGraphic; ParaNo: Integer; VAlign: TRVVAlign); { gr does not copied, do not free it!}
  1285. begin
  1286.   RVData.AddPictureExTag(Name, gr, ParaNo, VAlign, 0);
  1287. end;
  1288. {------------------------------------------------------------------------------}
  1289. procedure TCustomRichView.AddHotPictureTag(const Name: String; gr: TGraphic;
  1290.                                     ParaNo: Integer; VAlign: TRVVAlign; Tag: Integer);
  1291. begin
  1292.   RVData.AddHotPictureTag(Name, gr, ParaNo, VAlign, Tag);
  1293. end;
  1294. {------------------------------------------------------------------------------}
  1295. procedure TCustomRichView.AddHotPicture(const Name: String; gr: TGraphic; ParaNo: Integer;
  1296.                            VAlign: TRVVAlign);
  1297. begin
  1298.   RVData.AddHotPictureTag(Name, gr, ParaNo, VAlign, 0);
  1299. end;
  1300. {------------------------------------------------------------------------------}
  1301. procedure TCustomRichView.AddPicture(gr: TGraphic); { gr not copied, do not free it!}
  1302. begin
  1303.   RVData.AddPictureExTag('', gr, 1, rvvaBaseline, 0);
  1304. end;
  1305. {------------------------------------------------------------------------------}
  1306. { do not free ctrl yourself! }
  1307. procedure TCustomRichView.AddControlExTag(const Name: String; ctrl: TControl;
  1308.                                     ParaNo: Integer; VAlign: TRVVAlign; Tag: Integer);
  1309. begin
  1310.   RVData.AddControlExTag(Name, ctrl, ParaNo, VAlign, Tag);
  1311. end;
  1312. {------------------------------------------------------------------------------}
  1313. { do not free ctrl yourself!                                            }
  1314. procedure TCustomRichView.AddControlEx(const Name: String; ctrl: TControl; ParaNo: Integer;
  1315.                                  VAlign: TRVVAlign);
  1316. begin
  1317.   RVData.AddControlEx(Name, ctrl, ParaNo, VAlign);
  1318. end;
  1319. {------------------------------------------------------------------------------}
  1320. procedure TCustomRichView.AddControl(ctrl: TControl; center: Boolean); { do not free ctrl! }
  1321. begin
  1322.   if Center then
  1323.     RVData.AddControlExTag('',ctrl, 1, rvvaBaseline, 0)
  1324.   else
  1325.     RVData.AddControlExTag('',ctrl, 0, rvvaBaseline, 0);
  1326. end;
  1327. {------------------------------------------------------------------------------}
  1328. procedure TCustomRichView.Format_(OnlyResized,ForceFormat:Boolean; Canvas: TCanvas;
  1329.           OnlyTail, NoCaching, Reformatting: Boolean);
  1330. begin
  1331.    if VSmallStep = 0 then exit;
  1332.    if (csDesigning in ComponentState) then exit;
  1333.    {$IFDEF RVDEBUG}{$I Debugg.inc}{$ENDIF}
  1334.    RVData.Format_(OnlyResized, ForceFormat, False, 0, Canvas, OnlyTail,
  1335.      NoCaching, Reformatting);
  1336. end;
  1337. {------------------------------------------------------------------------------}
  1338. function TCustomRichView.GetFirstItemVisible: Integer;
  1339. begin
  1340.   Result := RVData.GetFirstItemVisible;
  1341. end;
  1342. {------------------------------------------------------------------------------}
  1343. function TCustomRichView.GetLastItemVisible: Integer;
  1344. begin
  1345.   Result := RVData.GetLastItemVisible;
  1346. end;
  1347. {------------------------------------------------------------------------------}
  1348. procedure TCustomRichView.Paint;
  1349.   {.......................................................}
  1350.     procedure DrawDesignInfo(const msg: String);
  1351.     var r: TRect;
  1352.     begin
  1353.       Canvas.Brush.Color := GetColor;
  1354.       Canvas.Brush.Style := bsSolid;
  1355.       if Ctl3d then
  1356.         Canvas.Pen.Color := clWindow
  1357.       else
  1358.         Canvas.Pen.Color := clWindowText;
  1359.       Canvas.Font.Color := clWindowText;
  1360.       Canvas.Font.Name := RVDEFAULTDESIGNFONT;
  1361.       Canvas.Font.Size := 8;
  1362.       Canvas.Font.Style := [];
  1363.       Canvas.FillRect(Canvas.ClipRect);
  1364.       r := ClientRect;
  1365.       DrawText(Canvas.Handle, PChar(msg), Length(msg),  r, DT_TOP or DT_WORDBREAK);
  1366.       if not Ctl3d then begin
  1367.         Canvas.Brush.Color := clWindowText;
  1368.         Canvas.FrameRect(ClientRect);
  1369.       end;
  1370.     end;
  1371.   {.......................................................}
  1372. var NeedXOR: Boolean;
  1373. begin
  1374.  if (csDesigning in ComponentState) then
  1375.    DrawDesignInfo(SysUtils.Format('%s:%s %s (%s)', [Name, ClassName, RVVersion, RVAddress]))
  1376.  else if not Assigned(FStyle) then
  1377.    DrawDesignInfo(SysUtils.Format(RVNOSTYLEMSG, [Name]))
  1378.  else begin
  1379.    NeedXOR := RVData.ClearXorDrawing;
  1380.    //if Assigned(FOnPaint) then
  1381.    //  FOnPaint(Self, Canvas, True);
  1382.    RVData.PaintBuffered;
  1383.    if Assigned(FOnPaint) then
  1384.      FOnPaint(Self, Canvas, False);
  1385.    if NeedXOR then
  1386.      RVData.XorDrawing;
  1387.  end;
  1388. end;
  1389. {------------------------------------------------------------------------------}
  1390. procedure TCustomRichView.CMMouseLeave(var Message: TMessage);
  1391. begin
  1392.   RVData.MouseLeave;
  1393. end;
  1394. {------------------------------------------------------------------------------}
  1395. procedure TCustomRichView.MouseMove(Shift: TShiftState; X, Y: Integer);
  1396. begin
  1397.   if {RVData.CaptureMouseItem=nil} True then begin
  1398.     if Y<-20 then
  1399.       VScrollDelta := -10
  1400.     else if Y<0 then
  1401.       VScrollDelta := -1
  1402.     else if Y>ClientHeight+20 then
  1403.       VScrollDelta := 10
  1404.     else if Y>ClientHeight then
  1405.       VScrollDelta := 1
  1406.     else
  1407.       VScrollDelta := 0;
  1408.     if X<-20 then
  1409.       HScrollDelta := -10
  1410.     else if X<0 then
  1411.       HScrollDelta := -1
  1412.     else if X>ClientWidth+20 then
  1413.       HScrollDelta := 10
  1414.     else if X>ClientWidth then
  1415.       HScrollDelta := 1
  1416.     else
  1417.       HScrollDelta := 0;
  1418.     inherited MouseMove(Shift, X, Y);
  1419.   end;
  1420.   RVData.MouseMove(Shift, X, Y);
  1421. end;
  1422. {------------------------------------------------------------------------------}
  1423. {$IFDEF RICHVIEWDEF5}
  1424. type
  1425.   TControlPopupMenuHack = class (TControl)
  1426.     public
  1427.       property PopupMenu;
  1428.   end;
  1429. {$ENDIF}
  1430. procedure TCustomRichView.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  1431. {$IFDEF RICHVIEWDEF5}
  1432. var p: TPoint;
  1433.     Handled: Boolean;
  1434.     RootRichView: TCustomRichView;
  1435.     Menu: TPopupMenu;
  1436.     function GetPopupMenu: TPopupMenu;
  1437.     var ctrl: TControl;
  1438.     begin
  1439.       Result := nil;
  1440.       ctrl := Self;
  1441.       while (ctrl<>nil) do begin
  1442.         Result := TControlPopupMenuHack(ctrl).PopupMenu;
  1443.         if Result<>nil then
  1444.           exit;
  1445.         ctrl := ctrl.Parent;
  1446.       end;
  1447.     end;
  1448. {$ENDIF}
  1449. begin
  1450.   inherited MouseUp(Button, Shift, X, Y);
  1451.   if (Button=mbLeft) then
  1452.     DeactivateScrollTimer;
  1453.   RVData.MouseUp(Button, Shift, X, Y);
  1454.   {$IFDEF RICHVIEWDEF5}
  1455.   if Style=nil then
  1456.     exit;
  1457.   RootRichView := TCustomRichView(RVData.GetAbsoluteRootData.GetParentControl);
  1458.   if not (csDesigning in ComponentState) and (Button=mbRight) then begin
  1459.     Handled := False;
  1460.     p.X := X;
  1461.     p.Y := Y;
  1462.     AdjustPopupMenuPos(p);
  1463.     p := ClientToScreen(p);
  1464.     RootRichView.DoContextPopup(RootRichView.ScreenToClient(p), Handled);
  1465.     if not Handled then begin
  1466.       Menu := GetPopupMenu;
  1467.       if (Menu<>nil) and Menu.AutoPopup then begin
  1468.         SendCancelMode(nil);
  1469.         Menu.PopupComponent := Self;
  1470.         Menu.Popup(p.X, p.Y);
  1471.       end;
  1472.     end;
  1473.   end;
  1474.   {$ENDIF}
  1475. end;
  1476. {------------------------------------------------------------------------------}
  1477. {$IFDEF RICHVIEWDEF5}
  1478. type
  1479.   TControlHack = class (TControl)
  1480.     public
  1481.       function GetCHPopupMenu: TPopupMenu;
  1482.   end;
  1483.   function TControlHack.GetCHPopupMenu: TPopupMenu;
  1484.   begin
  1485.     Result := GetPopupMenu;
  1486.   end;
  1487. procedure TCustomRichView.WMContextMenu(var Message: TWMContextMenu);
  1488. var Ctrl: TControl;
  1489. begin
  1490.   if (csDesigning in ComponentState) then begin
  1491.     inherited;
  1492.     exit;
  1493.   end;
  1494.   if (Message.XPos=-1) and (Message.YPos=-1) then begin
  1495.     if RVData.GetAbsoluteRootData.GetParentControl=Self then
  1496.       inherited
  1497.     else
  1498.       with Message do
  1499.         RVData.GetAbsoluteRootData.GetParentControl.Perform(Msg, hWnd, -1)
  1500.   end;
  1501.   Ctrl := ControlAtPos(ScreenToClient(SmallPointToPoint(Message.Pos)), False);
  1502.   if (Ctrl<>nil) and (TControlHack(Ctrl).GetCHPopupMenu<>GetPopupMenu) then
  1503.     inherited;
  1504. end;
  1505. {$ENDIF}
  1506. {------------------------------------------------------------------------------}
  1507. procedure TCustomRichView.SelectNext_(GoForward: Boolean);
  1508. begin
  1509.   SelectNext(nil,GoForward,True);
  1510. end;
  1511. {------------------------------------------------------------------------------}
  1512. procedure TCustomRichView.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  1513. begin
  1514.   if InplaceEditor=nil then begin
  1515.     Include(RVData.State,rvstDoNotTab);
  1516.   //if not (ssDouble in Shift) then
  1517.   //  Windows.SetFocus(Handle);
  1518.   end;
  1519.   RVData.MouseDown(Button, Shift, X, Y);
  1520.   inherited MouseDown(Button, Shift, X, Y);  
  1521.   if (Button=mbLeft) then
  1522.     ActivateScrollTimer(False);
  1523. end;
  1524. {------------------------------------------------------------------------------}
  1525. procedure TCustomRichView.ActivateScrollTimer(Slow: Boolean);
  1526. var Interval: Integer;
  1527. begin
  1528.   if not ScrollTimerActive then begin
  1529.     if Slow then
  1530.       Interval := 300
  1531.     else
  1532.       Interval := 100;
  1533.     SetTimer(Handle, RV_TIMERID_SCROLLING, Interval,nil);
  1534.     ScrollTimerActive := True;
  1535.   end;
  1536. end;
  1537. {------------------------------------------------------------------------------}
  1538. procedure TCustomRichView.DeactivateScrollTimer;
  1539. begin
  1540.   if ScrollTimerActive then begin
  1541.     if HandleAllocated then
  1542.       KillTimer(Handle, RV_TIMERID_SCROLLING);
  1543.     ScrollTimerActive := False;
  1544.   end;
  1545. end;
  1546. {------------------------------------------------------------------------------}
  1547. function TCustomRichView.CompareTags(Tag1, Tag2: Integer): Boolean;
  1548. begin
  1549.   if (rvoTagsArePChars in Options) then
  1550.     if (Tag1=0) then
  1551.       if (Tag2=0) then
  1552.         Result := True
  1553.       else
  1554.         Result := False
  1555.     else
  1556.       if (Tag2=0) then
  1557.         Result := False
  1558.       else
  1559.         Result := StrComp(PChar(Tag1),PChar(Tag2))=0
  1560.   else
  1561.     Result := Tag1=Tag2;
  1562. end;
  1563. {------------------------------------------------------------------------------}
  1564. procedure TCustomRichView.AppendFrom(Source: TCustomRichView);
  1565. begin
  1566.   RVData.AppendFrom(Source.RVData);
  1567. end;
  1568. {------------------------------------------------------------------------------}
  1569. function TCustomRichView.GetBackBitmap: TBitmap;
  1570. begin
  1571.   Result := Background.Bitmap;
  1572. end;
  1573. {------------------------------------------------------------------------------}
  1574. procedure TCustomRichView.SetBackBitmap(Value: TBitmap);
  1575. begin
  1576.   Background.Bitmap.Assign(Value);
  1577. end;
  1578. {------------------------------------------------------------------------------}
  1579. procedure TCustomRichView.DoOnBackBitmapChange(Sender: TObject);
  1580. begin
  1581.   if not RVData.UpdatingBAckgroundPalette then begin
  1582.     FullRedraw := Background.ScrollRequiresFullRedraw;//or (RVData.FZoomPercent<>100);
  1583.     RVData.UpdateBackgroundPaletteInfo(Background);
  1584.     if rvoFormatInvalidate in Options then Invalidate;
  1585.     {$IFNDEF RVDONOTUSEANIMATION}
  1586.     RVData.ResetAniBackground;
  1587.     {$ENDIF}
  1588.   end;
  1589. end;
  1590. {------------------------------------------------------------------------------}
  1591. function TCustomRichView.GetBackgroundStyle: TBackgroundStyle;
  1592. begin
  1593.   Result := Background.Style;
  1594. end;
  1595. {------------------------------------------------------------------------------}
  1596. procedure TCustomRichView.SetBackgroundStyle(Value: TBackgroundStyle);
  1597. begin
  1598.   Background.Style := Value;
  1599.   DoOnBackBitmapChange(nil);
  1600. end;
  1601. {------------------------------------------------------------------------------}
  1602. function TCustomRichView.GetColor: TColor;
  1603. begin
  1604.   {$IFDEF RVDEBUG}{$I Debuge.inc}{$ENDIF}
  1605.   if Color<>clNone then
  1606.     Result := Color
  1607.   else if Assigned(FStyle) then
  1608.     Result := FStyle.Color
  1609.   else
  1610.     Result := clWindow;
  1611. end;
  1612. {------------------------------------------------------------------------------}
  1613. function TCustomRichView.GetHoverColor(Color: TColor):TColor;
  1614. begin
  1615.   if Color<>clNone then
  1616.     Result := Color
  1617.   else
  1618.     Result := FStyle.HoverColor;
  1619. end;
  1620. {------------------------------------------------------------------------------}
  1621. procedure TCustomRichView.WMEraseBkgnd(var Message: TWMEraseBkgnd);
  1622. begin
  1623.   Message.Result := 1;
  1624. end;
  1625. {------------------------------------------------------------------------------}
  1626. procedure TCustomRichView.SetVSmallStep(Value: Integer);
  1627. begin
  1628.    if (Value<=0) or (VScrollVisible and (DocumentHeight div Value > 32000)) then
  1629.      exit;
  1630.    inherited SetVSmallStep(Value);
  1631. end;
  1632. {------------------------------------------------------------------------------}
  1633. procedure TCustomRichView.SetBiDiModeRV(const Value: TRVBiDiMode);
  1634. begin
  1635.   if Value<>BiDiMode then begin
  1636.     inherited SetBiDiModeRV(Value);
  1637.     Deselect;
  1638.     if not (rvstSkipFormatting in RVData.State) then
  1639.       Format;
  1640.   end;
  1641. end;
  1642. {------------------------------------------------------------------------------}
  1643. procedure TCustomRichView.SelectWordAt(X,Y: Integer);
  1644. begin
  1645.   RVData.SelectWordAt(X, Y);
  1646. end;
  1647. {------------------------------------------------------------------------------}
  1648. procedure TCustomRichView.DblClick;
  1649. begin
  1650.   inherited DblClick;
  1651.   RVData.DblClick;
  1652. end;
  1653. {------------------------------------------------------------------------------}
  1654. procedure TCustomRichView.DeleteSection(const CpName: String);
  1655. begin
  1656.   RVData.DeleteSection(CpName);
  1657. end;
  1658. {------------------------------------------------------------------------------}
  1659. procedure TCustomRichView.DeleteItems(FirstItemNo, Count: Integer);
  1660. begin
  1661.   RVData.DeleteItems(FirstItemNo, Count);