⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crvfdata.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit CRVFData;

interface
{$I RV_Defs.inc}
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Clipbrd,
     Forms,
     RVFuncs, RVStyle, RVItem, CRVData, DLines, RVScroll, RVBack, RVUni,
     RVClasses;

type
  TCustomRVFormattedData = class;
{-----------------------------------------------------------------------}
  { for internal use }
  TRVFlag = (rvflUseJumps, rvflTrim, rvflShareContents, rvflUseExternalLeading,
             rvflMouseXYAlwaysCorrect, rvflAllowCustomDrawItems,
             rvflPrinting, rvflRootEditor, rvflRoot);
  TRVFlags = set of TRVFlag;

{-----------------------------------------------------------------------}
  TRVJumpInfo = class
    public
     RVData: TCustomRVFormattedData;
     l,t,w,h: Integer;
     id, DrawItemNo: Integer;
     Cursor: TCursor;
  end;

  TRVSoftPageBreakInfo = class
    ItemNo, Offset, ExtraData: Integer;
  end;

  TRVSoftPageBreakList = class (TRVList)
    function FindItem(ItemNo: Integer): Integer;
  end;
{-----------------------------------------------------------------------}

  TCustomRVFormattedData = class (TCustomRVData)
    private
      LastRaisedCP: TRVCPInfo;
      XorImageDrawn: Boolean;
      FXORDrawing: TMouseMoveEvent;
      FCaptureMouseItem: TCustomRVItemInfo;
      FZoomPercent: Integer;
      //LastSelectionRect: TRect;
      function FindDrawItemAtPos(X, Y: Integer): Integer;
      procedure CopyText_;
      procedure CopyTextW_;
      procedure CopyImage_;
      {$IFNDEF RVDONOTUSERVF}
      procedure CopyRVF_(Color: TColor; Background: TRVBackground);
      {$ENDIF}

      {$IFNDEF RVDONOTUSERTF}
      procedure CopyRTF_(Color: TColor; Background: TRVBackground);
      {$ENDIF}

      procedure StartFormatting;
      procedure EndFormatting;
      procedure SearchHotItem(X, Y, HOffs, VOffs: Integer);
      //procedure SetZoomPercent(const Value: Integer);
    protected
      { Protected declarations }
      MouseX, MouseY: Integer;
      Jumps: TList;
      nJmps: Integer;
      LastItemFormatted: Integer;
      LastJumpMovedAbove, LastDIMovedAbove: Integer;
      LastRVDataMovedAbove: TCustomRVFormattedData;
      LastJumpDowned: Integer;
      FPartialSelectedItem: TCustomRVItemInfo;
      AlreadyFormatted: Boolean;
      FSoftPageBreaks: TRVSoftPageBreakList;
      procedure GetIndents(ItemNo: Integer; IsParaStart: Boolean;
        var FirstParaItemNo: Integer; var LeftIndent, RightIndent: Integer);
      function GetMaxIndent(ItemNo: Integer; var FirstParaItemNo: Integer): Integer;
      procedure InternalFreeItem(item: TCustomRVItemInfo; Clearing: Boolean); override;
      procedure FindDrawItemForSel(X, Y: Integer; var No, Offs: Integer; Strict: Boolean);
      procedure GetScreenLineBounds(DrawItemNo: Integer; var First, Last: Integer);
      procedure ApplyZoom(Canvas: TCanvas);
      procedure ZoomRectDown(var r: TRect);
      procedure ZoomInt(var v: Integer);
      procedure RestoreZoom(Canvas: TCanvas);
      procedure FinishScreenLine(const sad: TRVScreenAndDevice;
                                LineWidth, LastDrawItem: Integer;
                                parafinished: Boolean;
                                var ExtraSpace: Integer;
                                var dontdoit: Boolean);
      procedure FormatLine(const Text: String;
                           StartOffs, Len, ItemNo: Integer;
                           var x,baseline,prevdesc,prevabove:Integer;
                           Canvas: TCanvas;
                           var sad: TRVScreenAndDevice;
                           var IsParaStart: Boolean;
                           var LineWidth, FirstIndent, LastDrawItem, VerticalOffs: Integer;
                           var DontFSL: Boolean;
                           var LastTextStyle: Integer;
                           var TextMetric: TTextMetric;
                           var FirstParaItemNo: Integer;
                           NoCaching: Boolean);
      procedure FormatWords(ItemNo: Integer;
                       var x,baseline,prevdesc,prevabove:Integer;
                       Canvas: TCanvas;
                       var sad: TRVScreenAndDevice;
                       var IsParaStart: Boolean;
                       var LineWidth, FirstIndent, LastDrawItem, VerticalOffs: Integer;
                       var DontFSL: Boolean;
                       var LastTextStyle: Integer;
                       var TextMetric: TTextMetric;
                       var FirstParaItemNo: Integer;
                       NoCaching: Boolean);
      {$IFNDEF RVDONOTUSERVF}
      procedure RVFGetLimits(SaveScope: TRVFSaveScope;
                           var StartItem, EndItem, StartOffs, EndOffs: Integer;
                           var StartPart, EndPart: TRVMultiDrawItemPart); override;
      {$ENDIF}
      function  GetClientSelectionRect: TRect;
      procedure GetSADForFormatting(Canvas: TCanvas; var sad: TRVScreenAndDevice);  virtual;
      procedure DeselectPartiallySelectedItem(NewPartiallySelected: TCustomRVItemInfo); dynamic;
      procedure SetPartialSelectedItem(Item: TCustomRVItemInfo); virtual;
      procedure Formatted(FirstItemNo, LastItemNo: Integer; Partial: Boolean); dynamic;
      function GetInplaceEditor: TControl; dynamic;
      procedure DestroyInplaceEditor; dynamic;
      procedure ClearLastJump;
      function InsideSelection(DItemNo, DItemOffs: Integer): Boolean;
      procedure AfterDeleteStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList); override;
      procedure ResetSubCoords; dynamic;
      procedure ConcateItems(FirstItemNo: Integer);
    public
      FActiveItem: TCustomRVItemInfo;
      DocumentWidth: Integer;
      DocumentHeight, TextWidth,FocusedItemNo: Integer;
      DrawItems: TRVDrawLines;
      FSelStartNo, FSelEndNo, FSelStartOffs, FSelEndOffs: Integer;
      { Declarations that should be protected }
      procedure AssignSoftPageBreaks(RVPrint: TComponent);
      procedure ClearSoftPageBreaks;
      procedure Normalize;
      function GetOffsBeforeDrawItem(DrawItemNo: Integer): Integer;
      function GetOffsAfterDrawItem(DrawItemNo: Integer): Integer;
      function GetEditor: TWinControl; dynamic;
      procedure GetItemAt(X,Y: Integer; var ItemNo, OffsetInItem: Integer);
      procedure GetItemAtEx(X,Y: Integer; var RVData: TCustomRVFormattedData; var ItemNo, OffsetInItem: Integer;
                            Strict: Boolean);
      function FindWordAt(var Word: String; X, Y: Integer; var StyleNo,
                       ItemNo, Offs: Integer; var RVData: TCustomRVFormattedData): Boolean;
      function GetNextFocusedItem(ItemNo: Integer; GoForward: Boolean;
                                  var TopLevelRVData: TCustomRVFormattedData;
                                  var TopLevelItemNo: Integer): Integer;
      procedure ClearFocus;
      procedure AdjustFocus(NewFocusedItemNo: Integer; TopLevelRVData: TPersistent; TopLevelItemNo: Integer); dynamic;
      procedure GetOrigin(var ALeft, ATop: Integer); virtual;
      procedure GetOriginEx(var ALeft, ATop: Integer); dynamic;
      procedure BuildJumpsCoords(var StartJumpNo: Integer; jumps: TList);
      procedure ShowRectangle(Left, Top, Width, Height: Integer); dynamic;
      function GetFlags: TRVFlags; virtual;                   abstract;
      procedure SetFlags(const Value: TRVFlags); virtual;     abstract;
      function GetAreaWidth: Integer; virtual;                abstract;
      function GetLeftMargin: Integer; virtual;               abstract;
      function GetRightMargin: Integer; virtual;              abstract;
      function GetTopMargin: Integer; virtual;                abstract;
      function GetBottomMargin: Integer; virtual;             abstract;
      function GetMinTextWidth: Integer; virtual;             abstract;
      function GetMaxTextWidth: Integer; virtual;             abstract;
      function GetBackground: TRVBackground; virtual;         abstract;
      property Flags: TRVFlags read GetFlags write SetFlags;
      procedure GetSelBounds(var StartNo, EndNo, StartOffs, EndOffs: Integer; Normalize: Boolean);
      procedure StoreSelBounds(var StartNo, EndNo, StartOffs, EndOffs: Integer; Normalize: Boolean);
      procedure RestoreSelBounds(StartNo, EndNo, StartOffs, EndOffs: Integer);
      procedure DrawItem2Item(DrawItemNo, DrawItemOffs: Integer; var ItemNo, ItemOffs: Integer);
      procedure Item2FirstDrawItem(ItemNo: Integer; var DrawItemNo: Integer);
      procedure AdjustJumpsCoords;
      procedure AdjustVScrollUnits; virtual;                                           abstract;
      procedure SetDocumentAreaSize(Width,Height: Integer; UpdateH: Boolean); virtual; abstract;
      function FindDrawItemByItem(ItemNo: Integer): Integer;
      function GetFirstVisible(TopLine: Integer): Integer;

      procedure DoCopy; dynamic;
      function IsAssignedCopy: Boolean; dynamic;
      function IsAssignedRVMouseUp: Boolean; dynamic; abstract;
      function IsAssignedRVMouseDown: Boolean; dynamic; abstract;
      function IsAssignedRVRightClick: Boolean; dynamic;
      function IsAssignedJump: Boolean; dynamic; abstract;
      function IsAssignedRVDblClick: Boolean; dynamic;
      function IsAssignedCheckpointVisible: Boolean; dynamic; abstract;
      procedure DoRVMouseUp(Button: TMouseButton; Shift: TShiftState;
                            ItemNo, X, Y: Integer); dynamic; abstract;
      procedure DoRVMouseDown(Button: TMouseButton; Shift: TShiftState;
                            ItemNo, X, Y: Integer); dynamic; abstract;
      procedure DoRVRightClick(const ClickedWord: String; StyleNo, X, Y: Integer);dynamic;
      procedure DoJump(id: Integer); dynamic; abstract;
      procedure DoRVMouseMove(id: Integer); dynamic; abstract;
      procedure DoRVDblClick(const ClickedWord: String;
                            StyleNo: Integer); dynamic;
      procedure DoSelect; dynamic;
      procedure DoCheckpointVisible(CheckpointData: TCheckpointData); dynamic; abstract;
      function GetNormalCursor: TCursor; dynamic; abstract;
      function GetCPEventKind: TCPEventKind; dynamic;

      procedure DoOnSelection; dynamic;
      procedure InvalidateJumpRect(id: Integer);
      procedure Refresh;
      procedure UpdateView;
      procedure Invalidate;
      procedure InvalidateRect(const r: TRect);
      function ClientToScreen(const p: TPoint): TPoint; dynamic;
      function ScreenToClient(const p: TPoint): TPoint; dynamic;
      procedure GetSelStart(var DINo, DIOffs: Integer);dynamic;
      procedure SrchSelectIt(strt, offs, len: Integer; Invert: Boolean); dynamic;
      procedure SrchStart(Down: Boolean; var strt, offs: Integer);dynamic;

      property PartialSelectedItem: TCustomRVItemInfo read FPartialSelectedItem write SetPartialSelectedItem;
      function GetHOffs: Integer; virtual;
      function GetVOffs: Integer; virtual;
      function GetZHOffs: Integer;
      function GetZVOffs: Integer;
      procedure SetMouseCapture(Item: TCustomRVItemInfo;  var Left,Top: Integer);
      procedure ReleaseMouseCapture(Item: TCustomRVItemInfo);
      function GetWidth: Integer; virtual; abstract;
      function GetHeight: Integer; virtual; abstract;
      function GetCanvas: TCanvas; virtual;
      procedure ScrollTo(Y: Integer; Redraw: Boolean); virtual; abstract;
      procedure HScrollTo(X: Integer); virtual; abstract;
      function GetVSmallStep: Integer; virtual; abstract;
      procedure XorDrawing;
      procedure XorDrawingEx(X,Y: Integer);
      function ClearXorDrawing: Boolean;
      procedure AssignXorDrawing(P: TMouseMoveEvent);
      function UsingThisXorDrawing(P: TMouseMoveEvent): Boolean;
      procedure UnAssignXorDrawing(P: TMouseMoveEvent);
      procedure SetCursor(Cursor: TCursor); dynamic;

      function CalculatePureParaSectionWidth(ItemNo: Integer;
        var FirstParaItemNo: Integer; sad: PRVScreenAndDevice; Canvas: TCanvas): Integer;
      function CalculateParaSectionMinWidth(StartItemNo: Integer;
        var FirstParaItemNo: Integer; sad: PRVScreenAndDevice;
        Canvas: TCanvas): Integer;
      function CalculateParaSectionMinWidthDef(StartItemNo: Integer): Integer;
      function CalculateParaSectionsMinWidth(StartItemNo, EndItemNo: Integer;
        var FirstParaItemNo: Integer; sad: PRVScreenAndDevice;
        Canvas: TCanvas): Integer;
      function CalculateParaSectionsMinWidthDef(StartItemNo, EndItemNo: Integer): Integer;
      function CalculateMinItemWidthPlus_WithoutPSWidth(ItemNo: Integer;
        sad: PRVScreenAndDevice; Canvas: TCanvas): Integer;
      function CalculateMinItemsWidthPlus(StartItemNo, EndItemNo: Integer;
        var FirstParaItemNo: Integer; sad: PRVScreenAndDevice;
        Canvas: TCanvas): Integer;
      function CalculateMinItemWidthPlusEx(ItemNo: Integer): Integer;
      function CalculateMinItemsWidthPlusEx(StartItemNo, EndItemNo: Integer): Integer;
      function CalculateMinDocWidthPlus(sad: PRVScreenAndDevice; Canvas: TCanvas): Integer;
      function CalculateMinWidthAfterInsert(item:TCustomRVItemInfo; InsertItemNo: Integer): Integer;
      procedure Item2DrawItem(ItemNo, ItemOffs: Integer; var DrawItemNo, DrawItemOffs: Integer);
      procedure ClearTemporal;virtual;
      procedure Clear; override;
      procedure ClearJumps;
      procedure AdjustChildrenCoords;
      procedure Format_(OnlyResized, ForceFormat, NoScroll: Boolean; depth: Integer; Canvas: TCanvas; OnlyTail, NoCaching: Boolean); virtual;
      procedure Format(NoCaching: Boolean);
      function GetDrawItemNo(BoundLine: Integer; Option: Integer): Integer;
      procedure MouseLeave;
      procedure MouseMove(Shift: TShiftState; X, Y: Integer);
      procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);dynamic;
      procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);dynamic;
      procedure DblClick;
      procedure AfterVScroll;
      procedure UpdateBackgroundPaletteInfo(Background: TRVBackground);
      function UpdatingBackgroundPalette: Boolean;
      procedure OnTimerScroll;
      function GetColor: TColor; virtual; abstract;
      procedure AssignChosenRVData(RVData: TCustomRVFormattedData;
                                   Item: TCustomRVItemInfo); dynamic;
      procedure SilentReplaceChosenRVData(RVData: TCustomRVFormattedData); dynamic;
      procedure UnassignChosenRVData(RVData: TCustomRVData); dynamic;
      { moved from editor }
      procedure GetParaBounds(DINo1, DINo2: Integer; var ParaStart, ParaEnd: Integer);
      procedure FormatParas(StartDrawItemNo, EndDrawItemNo, ItemsInserted: Integer);
      procedure FormatParasExact(StartDrawItemNo, EndDrawItemNo, ItemsInserted: Integer; NoCaching: Boolean);
      { Public declarations }
      constructor Create;
      destructor Destroy; override;
      procedure PaintTo(Canvas: TCanvas; AClipRect: TRect);
      function  GetFirstItemVisible: Integer; dynamic;
      function  GetLastItemVisible: Integer; dynamic;

      function SearchText(Down, MatchCase, WholeWord: Boolean; s: String): Boolean;
      procedure GetWordAt(X, Y: Integer; var RVData: TCustomRVFormattedData; var ItemNo: Integer; var Word: String);
      procedure SelectWordAt(X, Y: Integer);

      procedure Deselect(NewPartiallySelected: TCustomRVItemInfo; MakeEvent: Boolean); dynamic;
      procedure SelectAll;
      function  SelectionExists(AllowReset: Boolean; UsePartialSelected: Boolean): Boolean;
      function  GetSelText(Unicode: Boolean): String;
      function  GetSelectedImage: TGraphic;
      procedure GetSelectionBounds(var StartItemNo, StartItemOffs, EndItemNo,
                       EndItemOffs: Integer; Normalize: Boolean);
      procedure GetSelectionBoundsEx(var StartItemNo, StartItemOffs, EndItemNo,
                       EndItemOffs: Integer; Normalize: Boolean); dynamic;
      procedure SetSelectionBounds(StartItemNo, StartItemOffs, EndItemNo,
                       EndItemOffs: Integer);
      function  GetSelectionRect: TRect;

      procedure GetCheckpointXY(CheckpointData: TCheckpointData; var X, Y: Integer);
      function  GetCheckpointYEx(CheckpointData: TCheckpointData): Integer;
      function  GetJumpPointY(id: Integer): Integer;
      function  GetJumpPointItemNo(id: Integer): Integer;
      procedure GetJumpPointLocation(id: Integer; var RVData: TCustomRVFormattedData; var ItemNo: Integer);

      procedure DeleteItems(FirstItemNo, Count: Integer); override;
      procedure DeleteParas(FirstItemNo, LastItemNo: Integer);

      {$IFNDEF RVDONOTUSERVF}
      procedure CopyRVF(Color: TColor; Background: TRVBackground);
      {$ENDIF}
      {$IFNDEF RVDONOTUSERTF}
      procedure CopyRTF(Color: TColor; Background: TRVBackground);
      {$ENDIF}
      procedure CopyText;
      procedure CopyTextW;
      procedure CopyImage;
      procedure Copy(Color: TColor; Background: TRVBackground);
      function  CopyDef(Color: TColor; Background: TRVBackground): Boolean;
      procedure SelectLine(ItemNo, Offs: Integer);
      function GetLineNo(ItemNo, ItemOffs: Integer): Integer;
      function GetItemCoords(ItemNo: Integer;var Left,Top: Integer): Boolean;
      function GetItemClientCoords(ItemNo: Integer;var Left,Top: Integer): Boolean;

      property CaptureMouseItem: TCustomRVItemInfo read FCaptureMouseItem;

      //property ZoomPercent:Integer read FZoomPercent write SetZoomPercent;
  end;
const
  RichViewSafeFormatting:Boolean = False;

implementation
uses RichView, RVCtrlData, RVStr, PtblRV, PtRVData
    {$IFNDEF RVDONOTUSELISTS}
    , RVMarker
    {$ENDIF}
    ;
{==============================================================================}
const gdinFirstVisible        = 1;

⌨️ 快捷键说明

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