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

📄 crvdata.pas

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

interface
{$I RV_Defs.inc}
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  {$IFNDEF RVDONOTUSEJPEGIMAGE}
  Jpeg,
  {$ENDIF}
  {$IFNDEF RVDONOTUSELISTS}
  RVMarker,
  {$ENDIF}
  {$IFDEF RICHVIEWDEF4}
  ImgList,
  {$ENDIF}
  RVBack, RVFuncs, RVItem, RVScroll, RVStyle, RVUni, RVClasses,
  RVRTFErr;

type
 TRVRTFFontTable = class; 
{-----------------------------------------------------------------------}
  TRVLayoutInfo = class
    public
      Loaded: Boolean;
      LeftMargin, RightMargin, TopMargin, BottomMargin: Integer;
      MinTextWidth, MaxTextWidth: Integer;
      BiDiMode: TRVBiDiMode;
      procedure SaveToStream(Stream: TStream; IncludeSize: Boolean);
      procedure LoadFromStream(Stream: TStream; IncludeSize: Boolean);
      procedure SaveTextToStream(Stream: TStream);
      procedure LoadText(const s: String);
      procedure LoadBinary(const s: String);
  end;
{-----------------------------------------------------------------------}
  TRVHTMLBulletInfo = class
    public
      FileName: String;
      ImageList: TCustomImageList;
      ImageIndex: Integer;
      BackColor: TColor;
      Graphic: TGraphic;
  end;

  TRVState = (rvstMakingSelection, rvstDrawHover,
              rvstSkipFormatting, rvstFormatParas, rvstIgnoreNextMouseDown,
              rvstChangingBkPalette, rvstCompletelySelected,
              rvstClearing, rvstResizing, rvstDoNotMoveChildren,
              rvstForceStyleChangeEvent, rvstIgnoreNextChar,
              rvstDoNotTab, rvstDeselecting, rvstUnAssigningChosen,
              rvstNoScroll, rvstFinalizingUndo, rvstRTFSkipPar,
              rvstLoadingAsPartOfItem, rvstMarkersBadlyNeeded,
              rvstReformatParentOnExit, rvstNoKillFocusEvents,
              rvstEditorUnformatted, rvstNameSet
              {$IFDEF RVMUDESELECT}
              , rvstMidSelClicked
              {$ENDIF}
              );
  TRVStates = set of TRVState;  

  TRVFSaveScope = (rvfss_Full, rvfss_Selection, rvfss_Page);

  PRVIntegerList = ^TRVIntegerList;

  TCustomRVData = class;
  TCustomRVData = class(TPersistent)
  private
    { Private declarations }
    FFirstJumpNo: Integer;
    FItems: TStringList;
    function GetPageBreaksBeforeItems(Index: Integer): Boolean;
    procedure SetPageBreaksBeforeItems(Index: Integer;  Value: Boolean);
    function GetItemCount: Integer;
  protected
    { Protected declarations }
    FAllowNewPara: Boolean;
    FirstCP, LastCP, NotAddedCP: TRVCPInfo;
    CPCount: Integer; 
    function NextCharStr(const str: String; ItemNo, Index: Integer): Integer;
    function PrevCharStr(const str: String; ItemNo, Index: Integer): Integer;
    function NextChar(ItemNo: Integer; Index: Integer): Integer;
    function PrevChar(ItemNo: Integer; Index: Integer): Integer;    
    procedure CheckItemClass(ItemNo: Integer;
      RequiredClass: TCustomRVItemInfoClass);
    function ShareItems: Boolean; dynamic;
    function CanLoadLayout: Boolean; dynamic;
    function GetDoInPaletteMode: TRVPaletteAction; virtual;
    function GetRVPalette: HPALETTE; virtual;
    function GetRVLogPalette: PLogPalette; virtual;
    function GetURL(id: Integer): String; dynamic; abstract;
    function GetOptions: TRVOptions; virtual;
    procedure SetOptions(const Value: TRVOptions); virtual;
    function GetRVFOptions: TRVFOptions; virtual;
    procedure SetRVFOptions(const Value: TRVFOptions); virtual;
    function GetRTFOptions: TRVRTFOptions; virtual;
    procedure SetRTFOptions(const Value: TRVRTFOptions); virtual;
    function GetRVFWarnings: TRVFWarnings; virtual;
    procedure SetRVFWarnings(const Value: TRVFWarnings); virtual;
    function GetDelimiters: String; dynamic;
    function GetRVFTextStylesReadMode: TRVFReaderStyleMode; virtual;
    function GetRVFParaStylesReadMode: TRVFReaderStyleMode; virtual;
    procedure RVFGetLimits(SaveScope: TRVFSaveScope;
                           var StartItem, EndItem, StartOffs, EndOffs: Integer;
                           var StartPart, EndPart: TRVMultiDrawItemPart); dynamic;
    function GetRTFProperties:TPersistent  {TRVRTFReaderProperties}; dynamic;
    {$IFNDEF RVDONOTUSERVF}
    function InsertRVFFromStream_(Stream: TStream;
                       var Index: Integer;
                       AParaNo: Integer;
                       AllowReplaceStyles, AppendMode, EditFlag: Boolean;
                       var Color: TColor;
                       Background: TRVBackground;
                       Layout: TRVLayoutInfo;
                       var NonFirstItemsAdded: Integer;
                       var Protect, FullReformat: Boolean):Boolean;
    procedure DataWriter(Stream: TStream);
    procedure DataReader(Stream: TStream);
    {$ENDIF}
    procedure NormalizeParas(StartItemNo: Integer);
    procedure InsertCheckpoint(ItemNo, Tag: Integer; const Name: String; RaiseEvent: Boolean);
    procedure UpdateCPPos(cp: TRVCPInfo; ItemNo: Integer);
    procedure UnlinkCheckpoint(cp: TRVCPInfo; DecCPCount: Boolean);
    function FindCPBeforeItem(ItemNo: Integer): TRVCPInfo;
    procedure UpdateCPItemNo;
    procedure InternalFreeItem(item: TCustomRVItemInfo; Clearing: Boolean); virtual;
    function IsDelimiterA(ch: Char): Boolean;
    function IsDelimiterW(ch: Word): Boolean;
    function IsDelimiter(const s: String; Index: Integer; ItemOptions: TRVItemOptions): Boolean;
    function GetItemOptions(ItemNo: Integer): TRVItemOptions;
    procedure Replace0(var s: String);
    function RV_CanConcateItems(FirstItemNo: Integer;
                            li1, li2: TCustomRVItemInfo;
                            IgnorePara: Boolean): Boolean;
    procedure SimpleConcate(FirstItemNo: Integer; li1, li2: TCustomRVItemInfo);
    procedure MassSimpleConcate(FirstItemNo, LastItemNo: Integer);
    procedure AfterDeleteStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList); dynamic;
    procedure InitStyleMappings(var PTextStylesMapping, PParaStylesMapping, PListStylesMapping: PRVIntegerList); dynamic;
    procedure DoneStyleMappings(PTextStylesMapping, PParaStylesMapping, PListStylesMapping: PRVIntegerList); dynamic;
    function SupportsPageBreaks: Boolean; dynamic;
    procedure AdjustInItemsRange(var ItemNo: Integer);
    {$IFNDEF RVDONOTUSEHTML}
    procedure SaveHTMLCheckpoint(Stream: TStream;
                                 Checkpoint: TRVCPInfo; var cpno: Integer;
                                 const Prefix: String;
                                 FromNewLine: Boolean;
                                 Options: TRVSaveOptions);
    {$ENDIF}
    function GetFirstParaItem(ItemNo: Integer): Integer;
    function GetFirstParaSectionItem(ItemNo: Integer): Integer;
    {$IFNDEF RVDONOTUSELISTS}
    procedure DestroyMarkers; dynamic;
    function FindPreviousMarker(ItemNo: Integer): TRVMarkerItemInfo;
    function FindMarkerLocalLocationFrom(StartItemNo: Integer;
      Marker: TRVMarkerItemInfo): Integer;
    function FindLastMarkerIndex(StartAfterMeIndex: Integer; ListStyles: TRVIntegerList): Integer;
    {$ENDIF}
  public
    { Declarations that should be protected }
    State: TRVStates;
    procedure ExpandToParaSection(ItemNo1,ItemNo2: Integer; var FirstItemNo, LastItemNo: Integer);
    procedure ExpandToPara(ItemNo1,ItemNo2: Integer; var FirstItemNo, LastItemNo: Integer);    
    function GetBiDiMode: TRVBiDiMode; virtual;
    function GetItemBiDiMode(ItemNo: Integer): TRVBiDiMode;
    function GetParaBiDiMode(ParaNo: Integer): TRVBiDiMode;
    function GetExtraRTFCode(Area: TRVRTFSaveArea; Obj: TObject; Index1, Index2: Integer; InStyleSheet: Boolean): String; dynamic;
    function GetExtraHTMLCode(Area: TRVHTMLSaveArea; CSSVersion: Boolean): String; dynamic;
    function ItemLength(ItemNo: Integer): Integer;
    procedure ReadHyperlink(const Target, Extras: String; DocFormat: TRVLoadFormat;
                            var StyleNo, ItemTag: Integer; var ItemName: String); dynamic;
    function InsertFirstRVFItem(var Index: Integer; var s: String;
                       var li: TCustomRVItemInfo; EditFlag: Boolean;
                       var FullReformat: Boolean;
                       var NewListNo: Integer): Boolean; dynamic;
    function GetNextFileName(const ImagesPrefix, Path, Ext: String;
                       var imgSaveNo: Integer;
                       OverrideFiles: Boolean): String; dynamic;
    function GetRVData: TCustomRVData; virtual;
    function GetSourceRVData: TCustomRVData; virtual;
    function GetStyleCodePage(StyleNo: Integer): TRVCodePage;
    function GetDefaultCodePage: TRVCodePage;
    procedure FreeCheckpoint(var cp: TRVCPInfo; AdjustLinks, DecCPCount: Boolean);
    procedure SetCP(Item: TCustomRVItemInfo; var PrevCP, CP: TRVCPInfo);
    procedure FreeItem(ItemNo: Integer; Clearing: Boolean);
    procedure Clear; dynamic;
    function ReplaceTabs(const s: String; StyleNo: Integer; UnicodeDef: Boolean): String;
    function SaveComponentToFile(const Path: String;
                       SaveMe: TComponent;
                       SaveFormat: TRVSaveFormat): String; virtual;
    function SavePicture(DocumentSaveFormat: TRVSaveFormat;
                       const imgSavePrefix, Path: String;
                       var imgSaveNo: Integer;
                       OverrideFiles: Boolean;
                       CurrentFileColor: TColor;
                       gr: TGraphic): String; virtual;
    function RVFPictureNeeded(const ItemName: String; ItemTag: Integer): TGraphic; dynamic;
    procedure ControlAction(ControlAction: TRVControlAction; ItemNo: Integer;
                            Item: TCustomRVItemInfo);
    procedure ItemAction(ItemAction: TRVItemAction; Item: TCustomRVItemInfo;
                         var Text: String; RVData: TCustomRVData); virtual;
    procedure ControlAction2(ControlAction: TRVControlAction; ItemNo: Integer;
                            var Control:  TControl); dynamic; abstract;
    function RVFControlNeeded(const ItemName: String; ItemTag: Integer): TControl; dynamic;
    function RVFImageListNeeded(ImageListTag: Integer): TCustomImageList; dynamic;
    procedure HTMLSaveImage(RVData: TCustomRVData; ItemNo: Integer;
                            const Path: String; BackgroundColor: TColor;
                            var Location: String; var DoDefault: Boolean); dynamic; abstract;
    function GetRVStyle: TRVStyle; virtual;
    function GetParentControl: TWinControl; dynamic;
    procedure ShareItemsFrom(Source: TCustomRVData);
    procedure UpdateItemsPaletteInfo;
    procedure DrainFrom(Victim: TCustomRVData);
    procedure SetParagraphStyleToAll(ParaNo: Integer);
    procedure MakeRTFTables(ColorList: TRVColorList; ListOverrideCountList: TRVIntegerList; TopLevel: Boolean);
    procedure MarkStylesInUse(UsedTextStyles, UsedParaStyles, UsedListStyles: TRVIntegerList); dynamic;
    procedure UpdateStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList);
    procedure GetParentInfo(var ParentItemNo: Integer;
                            var Location: TRVStoreSubRVData); dynamic;
    function GetChosenRVData: TCustomRVData; dynamic;
    function GetChosenItem: TCustomRVItemInfo; dynamic;
    { Public declarations }
    constructor Create;
    destructor Destroy; override;

    procedure DeleteUnusedStyles(TextStyles, ParaStyles, ListStyles: Boolean);

    procedure AddItem(const Text: String; Item: TCustomRVItemInfo);
    procedure AddBreakExTag(Width: Byte; Style: TRVBreakStyle;
                       Color: TColor; Tag: Integer);
    procedure AddBreak;
    procedure AddBreakEx(Width: Byte; Style: TRVBreakStyle; Color: TColor);
    procedure AddBreakTag(Tag: Integer);
    procedure AddFmt(const FormatStr: String; const Args: array of const;
                       StyleNo, ParaNo: Integer);
    procedure AddNL(const s: String; StyleNo, ParaNo: Integer);
    procedure AddNLTag(const s: String; StyleNo, ParaNo, Tag: Integer);
    procedure AddTextNL(s: String; StyleNo, FirstParaNo, OtherParaNo: Integer
                        {$IFDEF RICHVIEWDEF4};Tag: Integer=0{$ENDIF});
    procedure AddTextBlockNL(s: String; StyleNo, ParaNo: Integer
                        {$IFDEF RICHVIEWDEF4};Tag: Integer=0{$ENDIF});
    procedure AddBulletEx(const Name: String; ImageIndex: Integer;
                       ImageList: TCustomImageList; ParaNo: Integer);
    procedure AddBulletExTag(const Name: String; ImageIndex: Integer;
                       ImageList: TCustomImageList; ParaNo, Tag: Integer);
    procedure AddHotspotEx(const Name: String; ImageIndex,
                       HotImageIndex: Integer; ImageList: TCustomImageList; ParaNo: Integer);
    procedure AddHotspotExTag(const Name: String; ImageIndex,
                       HotImageIndex: Integer; ImageList: TCustomImageList;
                       ParaNo, Tag: Integer);
    function AddNamedCheckpointExTag(const CpName: String; RaiseEvent: Boolean;
                       Tag: Integer): Integer;
    procedure AddPictureExTag(const Name: String; gr: TGraphic; ParaNo: Integer;
                       VAlign: TRVVAlign; Tag: Integer);
    procedure AddControlExTag(const Name: String; ctrl: TControl;
                       ParaNo: Integer; VAlign: TRVVAlign; Tag: Integer);
    procedure AddPictureEx(const Name: String; gr: TGraphic; ParaNo: Integer;
                       VAlign: TRVVAlign);
    procedure AddControlEx(const Name: String; ctrl: TControl;
                       ParaNo: Integer; VAlign: TRVVAlign);
    procedure AddHotPicture(const Name: String; gr: TGraphic; ParaNo: Integer;
                       VAlign: TRVVAlign);
    procedure AddHotPictureTag(const Name: String; gr: TGraphic; ParaNo: Integer;
                       VAlign: TRVVAlign; Tag: Integer);
    function GetFirstCheckpoint: TCheckpointData;
    function GetNextCheckpoint(CheckpointData: TCheckpointData): TCheckpointData;
    function GetLastCheckpoint: TCheckpointData;
    function GetPrevCheckpoint(CheckpointData: TCheckpointData): TCheckpointData;
    function GetItemCheckpoint(ItemNo: Integer):TCheckpointData;
    function FindCheckpointByName(const Name: String): TCheckpointData;
    function FindCheckpointByTag(Tag: Integer): TCheckpointData;
    function GetCheckpointByNo(No: Integer): TCheckpointData;
    function GetCheckpointItemNo(CheckpointData: TCheckpointData): Integer;
    function GetCheckpointNo(CheckpointData: TCheckpointData): Integer;
    procedure GetCheckpointInfo(CheckpointData: TCheckpointData;
                       var Tag: Integer; var Name: String;
                       var RaiseEvent: Boolean);

    procedure GetBreakInfo(ItemNo: Integer; var AWidth: Byte;
                       var AStyle: TRVBreakStyle; var AColor: TColor;
                       var ATag: Integer);
    procedure GetBulletInfo(ItemNo: Integer; var AName: String;
                       var AImageIndex: Integer;
                       var AImageList: TCustomImageList;
                       var ATag: Integer);
    procedure GetHotspotInfo(ItemNo: Integer; var AName: String;
                       var AImageIndex, AHotImageIndex: Integer;
                       var AImageList: TCustomImageList;
                       var ATag: Integer);
    procedure GetPictureInfo(ItemNo: Integer; var AName: String;
                       var Agr: TGraphic; var AVAlign: TRVVAlign;
                       var ATag: Integer);
    procedure GetControlInfo(ItemNo: Integer; var AName: String;
                       var Actrl: TControl; var AVAlign: TRVVAlign;
                       var ATag: Integer);
    procedure GetTextInfo(ItemNo: Integer; var AText: String;
                       var ATag: Integer);
    function GetItemTag(ItemNo: Integer): Integer;

    function IsParaStart(ItemNo: Integer): Boolean;
    function GetItemPara(ItemNo: Integer): Integer;
    function IsFromNewLine(ItemNo: Integer): Boolean;

    procedure SetBreakInfo(ItemNo: Integer; AWidth: Byte; AStyle: TRVBreakStyle;
                       AColor: TColor; ATag: Integer);
    procedure SetBulletInfo(ItemNo: Integer; const AName: String;
                       AImageIndex: Integer; AImageList: TCustomImageList;
                       ATag: Integer);
    procedure SetHotspotInfo(ItemNo: Integer; const AName: String;
                       AImageIndex, AHotImageIndex: Integer;
                       AImageList: TCustomImageList; ATag: Integer);
    // ret value: reformatting needed
    function SetPictureInfo(ItemNo: Integer; const  AName: String;
                       Agr: TGraphic; AVAlign: TRVVAlign;
                       ATag: Integer): Boolean;
    function SetControlInfo(ItemNo: Integer; const AName: String;
                       AVAlign: TRVVAlign; ATag: Integer): Boolean;
    procedure SetItemTag(ItemNo: Integer; ATag: Integer);
    function SetItemExtraIntProperty(ItemNo: Integer; Prop: TRVExtraItemProperty; Value: Integer): Boolean;
    function GetItemExtraIntProperty(ItemNo: Integer; Prop: TRVExtraItemProperty; var Value: Integer): Boolean;    
    procedure SetCheckpointInfo(ItemNo: Integer; ATag: Integer; const AName: String;
                       ARaiseEvent: Boolean);
    function RemoveCheckpoint(ItemNo: Integer): Boolean;

⌨️ 快捷键说明

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