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

📄 rvitem.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{=================================} unit RVItem; {=============================}
{------------------------------------------------------------------------------}
{ Copyright (C) S.Tkachenko                                                    }
{==============================================================================}

interface

{$I RV_Defs.inc}

uses SysUtils, Classes, Windows, Graphics, Controls,
     CommCtrl,
     {$IFNDEF RVDONOTUSEJPEGIMAGE}
     Jpeg,
     {$ENDIF}
     {$IFDEF RICHVIEWDEF4}
     ImgList,
     {$ENDIF}
     RVClasses, RVFuncs, RVScroll, RVStyle, DLines;

type
  TRVMultiDrawItemPart = class // class for printing
    public
      Height: Integer;
      function GetSoftPageBreakInfo: Integer; dynamic;
  end;


  ERichViewError = class(Exception);

  TRVItemOption = (rvioSameAsPrev, rvioPageBreakBefore, rvioBR, rvioUnicode);
  TRVItemOptions = set of TRVItemOption;

  TRVItemDrawState = (rvidsSelected, rvidsCurrent, rvidsHover,
                      rvidsPrinting, rvidsPreview,rvidsPreviewCorrection,
                      rvidsControlFocused);
  TRVItemDrawStates = set of TRVItemDrawState;

  TRVFReadMode = (rmText, rmBeforeBinary, rmBinary, rmBeforeUnicode, rmUnicode, rmAfterUnicode);
  TRVFReadState = (rstHeader, rstData, rstSkip);

  TRVItemBoolProperty = (rvbpFullWidth, rvbpValid, rvbpRequiresRVFLines,
                         rvbpDisplayActiveState, rvbpDrawingChangesFont,
                         rvbpCanSaveUnicode,
                         rvbpAlwaysInText, rvbpImmediateControlOwner);
  TRVItemBoolPropertyEx = (rvbpPrintToBMP, rvbpJump, rvbpAllowsFocus,rvbpHotColdJump,
                           rvbpXORFocus, rvbpHotCold, rvbpActualPrintSize);
  TRVEnterDirection = (rvedLeft, rvedRight, rvedTop, rvedBottom);

  TRVExtraItemProperty = (rvepUnknown, rvepVShift, rvepVShiftAbs,
                          rvepImageWidth, rvepImageHeight,
                          rvepTransparent, rvepTransparentMode,
                          rvepTransparentColor, rvepMinHeightOnPage);
{------------------------------------------------------------------------------}
  TRVCPInfo = class;
  TCustomRVItemInfo = class;
  TRVCPInfo = class
    public
      Name: String;
      Next, Prev: TRVCPInfo;
      RaiseEvent: Boolean;
      ItemInfo : TCustomRVItemInfo;
      ItemNo: Integer; // <- not maintained automatically
      Tag: Integer;
      procedure Assign(Source: TRVCPInfo; TagsArePChars: Boolean);
      function CreateCopy(TagsArePChars: Boolean): TRVCPInfo;
  end;
{------------------------------------------------------------------------------}
 TRVSubRVDataPos = (rvdFirst, rvdLast, rvdChosenUp, rvdChosenDown, rvdNext, rvdPrev);
 TRVStoreSubRVData = class
   function Duplicate: TRVStoreSubRVData; dynamic;
 end;

{------------------------------------------------------------------------------}
  TCustomRVItemInfo = class (TPersistent)
    private
      function GetSameAsPrev: Boolean;
      procedure SetSameAsPrev(const Value: Boolean);
      function GetBR: Boolean;
      procedure SetBR(Value: Boolean);
      function GetPageBreakBefore: Boolean;
      procedure SetPageBreakBefore(const Value: Boolean);
    protected
      function SaveRVFHeaderTail(RVData: TPersistent): String; dynamic;
      function GetRVFExtraPropertyCount: Integer; dynamic;
      procedure SaveRVFExtraProperties(Stream: TStream); dynamic;
    public
      StyleNo,ParaNo: Integer;
      ItemOptions: TRVItemOptions;
      Checkpoint: TRVCPInfo;
      JumpID: Integer;
      Tag: Integer;
      DrawItemNo: Integer;
      constructor Create(RVData: TPersistent); virtual;
      procedure Assign(Source: TCustomRVItemInfo); {$IFDEF RICHVIEWDEF4} reintroduce; {$ENDIF} dynamic;
      function GetSubRVDataAt(X,Y: Integer): TPersistent; dynamic;
      function GetMinWidth(sad: PRVScreenAndDevice; Canvas: TCanvas; RVData: TPersistent): Integer; virtual;
      function OwnsControl(AControl: TControl): Boolean; dynamic;
      function OwnsInplaceEditor(AEditor: TControl): Boolean; dynamic;
      function CanBeBorderStart: Boolean;
      function ParaStart(CountBR: Boolean): Boolean;
      property SameAsPrev: Boolean read GetSameAsPrev write SetSameAsPrev;
      function AsImage: TGraphic; virtual;
      procedure SaveToHTML(Stream: TStream; RVData: TPersistent;
                           ItemNo: Integer;
                           const Text, Path: String;
                           const imgSavePrefix: String;
                           var imgSaveNo: Integer;
                           CurrentFileColor: TColor;
                           SaveOptions: TRVSaveOptions;
                           UseCSS: Boolean;
                           Bullets: TRVList); dynamic;
      function AsText(LineWidth: Integer;
                           RVData: TPersistent;
                           const Text, Path: String;
                           TextOnly,Unicode: Boolean): String; dynamic;
      procedure UpdatePaletteInfo(PaletteAction: TRVPaletteAction;
                                  ForceRecreateCopy: Boolean;
                                  Palette: HPALETTE;
                                  LogPalette: PLogPalette); dynamic;
      function ReadRVFHeader(var P: PChar; RVData: TPersistent): Boolean; dynamic;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; virtual;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; virtual;
      function ReadRVFLine(const s: String; RVData: TPersistent;
                           ReadType, LineNo, LineCount: Integer;
                           var Name: String;
                           var ReadMode: TRVFReadMode;
                           var ReadState: TRVFReadState): Boolean; dynamic;
      procedure SaveRVF(Stream: TStream; RVData: TPersistent; ItemNo, ParaNo: Integer;
                        const Name: String;
                        Part: TRVMultiDrawItemPart;
                        ForceSameAsPrev: Boolean); dynamic;
      procedure SaveRTF(Stream: TStream; RVData: TPersistent; ItemNo: Integer;
        const Name: String; TwipsPerPixel: Double; Level: Integer;
        ColorList: TRVColorList;
        StyleToFont, ListOverrideOffsetsList1, ListOverrideOffsetsList2: TRVIntegerList;
        FontTable: TRVList); dynamic;
      procedure FillRTFTables(ColorList: TRVColorList; ListOverrideCountList: TRVIntegerList;
        RVData: TPersistent); dynamic;
      procedure PaintFullWidth(Left, Right, Top: Integer; Canvas: TCanvas;
                      State: TRVItemDrawStates;
                      Style: TRVStyle; const ClipRect: TRect;
                      dli: TRVDrawLineInfo); virtual;
      procedure Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates;
                      Style: TRVStyle; dli: TRVDrawLineInfo); virtual;
      function PrintToBitmap(Bkgnd: TBitmap; Preview: Boolean; RichView: TRVScroller; dli: TRVDrawLineInfo; Part: Integer):Boolean; virtual;
      procedure Print(Canvas: TCanvas; x,y,x2: Integer; Preview, Correction: Boolean;
                      const sad: TRVScreenAndDevice; RichView: TRVScroller;
                      dli: TRVDrawLineInfo;
                      Part: Integer); virtual;
      function GetImageWidth(RVStyle: TRVStyle): Integer; virtual;
      function GetImageHeight(RVStyle: TRVStyle): Integer; virtual;
      function GetBorderWidth: Integer; virtual;
      function GetBorderHeight: Integer; virtual;

      procedure MovingToUndoList(ItemNo: Integer; RVData, AContainerUndoItem: TObject); dynamic;
      procedure MovingFromUndoList(ItemNo: Integer; RVData: TObject); dynamic;
      procedure FinalizeUndoGroup; dynamic;

      function MouseMove(Shift: TShiftState; X,Y, ItemNo: Integer; RVData: TObject):Boolean; dynamic;
      function MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y, ItemNo: Integer; RVData: TObject):Boolean; dynamic;
      function MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y, ItemNo: Integer; RVData: TObject):Boolean; dynamic;

      procedure BeforeLoading(FileFormat: TRVLoadFormat); dynamic;
      procedure AfterLoading(FileFormat: TRVLoadFormat); dynamic;
      procedure DeselectPartial; dynamic;
      function PartiallySelected: Boolean; dynamic;
      function CanDeletePartiallySelected: Boolean; dynamic;
      procedure DeletePartiallySelected; dynamic;
      procedure ApplyParaStyleToPartiallySelected(ParaNo: Integer); dynamic;
      procedure ApplyParaStyleConversionToPartiallySelected(UserData: Integer); dynamic;
      procedure ApplyStyleConversionToPartiallySelected(UserData: Integer);dynamic;
      procedure ApplyStyleConversion(RVData: TPersistent; UserData: Integer); dynamic;
      function CreatePrintingDrawItem(RVData: TObject; const sad: TRVScreenAndDevice): TRVDrawLineInfo; virtual;

      procedure StartExport; dynamic;
      procedure EndExport; dynamic;

      procedure Inserting(RVData: TObject; var Text: String; Safe: Boolean); virtual;
      procedure Inserted(RVData: TObject; ItemNo: Integer); virtual;
      procedure BeforeUndoChangeProperty; dynamic;
      procedure AfterUndoChangeProperty; dynamic;

      function EnterItem(From: TRVEnterDirection; Coord: Integer): Boolean; dynamic;
      function GetHypertextCursor(RVStyle: TRVStyle): TCursor; dynamic;
      procedure BuildJumps(Left,Top: Integer; var StartJumpNo: Integer; jumps: TList); dynamic;
      procedure Focusing;dynamic;
      function MoveFocus(GoForward: Boolean; var TopLevelRVData: TPersistent; var TopLevelItemNo: Integer): Boolean; dynamic;
      procedure ClearFocus; dynamic;
      procedure Execute(RVData:TPersistent);dynamic;
      function AdjustFocusToControl(Control: TControl; var TopLevelRVData: TPersistent; var TopLevelItemNo: Integer):Boolean;dynamic;
      procedure OnDocWidthChange(DocWidth: Integer; dli: TRVDrawLineInfo; Printing: Boolean; Canvas: TCanvas;
                                 RVData: TPersistent; sad: PRVScreenAndDevice; var HShift: Integer;
                                 NoCaching: Boolean); virtual;
      procedure MarkStylesInUse(UsedTextStyles, UsedParaStyles, UsedListStyles: TRVIntegerList); dynamic;
      procedure UpdateStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList); dynamic;
      function GetSubRVData(var StoreState: TRVStoreSubRVData; Position: TRVSubRVDataPos): TPersistent; dynamic;
      procedure ChooseSubRVData(StoreState: TRVStoreSubRVData); dynamic;
      procedure CleanUpChosen; dynamic;
      procedure ResetSubCoords; dynamic;
      function SetExtraIntProperty(Prop: TRVExtraItemProperty; Value: Integer): Boolean; dynamic;
      function GetExtraIntProperty(Prop: TRVExtraItemProperty; var Value: Integer): Boolean; dynamic;
      function GetSoftPageBreakDY(Data: Integer): Integer; dynamic;


      property BR: Boolean read GetBR write SetBR;
      property PageBreakBefore: Boolean read GetPageBreakBefore write SetPageBreakBefore;
  end;

  TCustomRVItemInfoClass = class of TCustomRVItemInfo;

  TRVTextItemInfo = class (TCustomRVItemInfo)
    public
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override;
      procedure Execute(RVData:TPersistent);override;
      procedure MarkStylesInUse(UsedTextStyles, UsedParaStyles, UsedListStyles: TRVIntegerList); override;
      procedure UpdateStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList); override;
  end;

  TRVTextItemInfoClass = class of TRVTextItemInfo;

  TRVNonTextItemInfo = class (TCustomRVItemInfo)
    protected
      function GetHeight: Integer; virtual;
      function GetWidth: Integer;  virtual;
      procedure SetExtraPropertyFromRVFStr(const Str: String);
    public
      function GetLeftOverhang: Integer; virtual;
      procedure AdjustInserted(x,y: Integer; adjusty: Boolean); virtual;
      property Height: Integer read GetHeight;
      property Width: Integer read GetWidth;
  end;

  TRVFullLineItemInfo = class (TRVNonTextItemInfo)
    public
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetBorderWidth: Integer; override;
      function GetBorderHeight: Integer; override;
  end;

  TRVRectItemInfo = class (TRVNonTextItemInfo)
    protected
      FMinHeightOnPage: Integer;
      function GetDescent: Integer; virtual;
      function SaveRVFHeaderTail(RVData: TPersistent): String; override;
      function GetRVFExtraPropertyCount: Integer; override;
      procedure SaveRVFExtraProperties(Stream: TStream); override;
      function GetVShiftCSS(RVStyle: TRVStyle): String;
    public
      VAlign: TRVVAlign;
      VShift: Integer;
      VShiftAbs: Boolean;
      procedure Assign(Source: TCustomRVItemInfo); override;
      function SetExtraIntProperty(Prop: TRVExtraItemProperty; Value: Integer): Boolean; override;
      function GetExtraIntProperty(Prop: TRVExtraItemProperty; var Value: Integer): Boolean; override;
      function ReadRVFHeader(var P: PChar; RVData: TPersistent): Boolean; override;
      property Descent: Integer read GetDescent;
  end;

  TRVControlItemInfo = class (TRVRectItemInfo)
    protected
      function GetHeight: Integer; override;
      function GetWidth: Integer; override;
      function GetRVFExtraPropertyCount: Integer; override;
      procedure SaveRVFExtraProperties(Stream: TStream); override;
    public
      Control:  TControl;
      PercentWidth: Integer;
      constructor CreateEx(RVData: TPersistent;AControl: TControl; AVAlign: TRVVAlign);
      destructor Destroy; override;
      function GetMinWidth(sad: PRVScreenAndDevice; Canvas: TCanvas; RVData: TPersistent): Integer; override;
      procedure AdjustInserted(x,y: Integer; adjusty: Boolean); override;
      function PrintToBitmap(Bkgnd: TBitmap; Preview: Boolean; RichView: TRVScroller;
                             dli: TRVDrawLineInfo; Part: Integer):Boolean; override;
      function CreatePrintingDrawItem(RVData: TObject; const sad: TRVScreenAndDevice): TRVDrawLineInfo; override;
      procedure Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates;
                      Style: TRVStyle; dli: TRVDrawLineInfo); override;
      function OwnsControl(AControl: TControl): Boolean; override;
      function AsText(LineWidth: Integer;
                           RVData: TPersistent;
                           const Text, Path: String;
                           TextOnly,Unicode: Boolean): String; override;
      procedure SaveToHTML(Stream: TStream; RVData: TPersistent;
                           ItemNo: Integer;
                           const Text, Path: String;
                           const imgSavePrefix: String;
                           var imgSaveNo: Integer;
                           CurrentFileColor: TColor;
                           SaveOptions: TRVSaveOptions;
                           UseCSS: Boolean;
                           Bullets: TRVList); override;
      function ReadRVFLine(const s: String; RVData: TPersistent;
                           ReadType, LineNo, LineCount: Integer;
                           var Name: String;
                           var ReadMode: TRVFReadMode;
                           var ReadState: TRVFReadState): Boolean; override;
      procedure SaveRVF(Stream: TStream; RVData: TPersistent; ItemNo, ParaNo: Integer;
                        const Name: String; Part: TRVMultiDrawItemPart;
                        ForceSameAsPrev: Boolean); override;

⌨️ 快捷键说明

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