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

📄 rvitem.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      function SetExtraIntProperty(Prop: TRVExtraItemProperty; Value: Integer): Boolean; override;
      function GetExtraIntProperty(Prop: TRVExtraItemProperty; var Value: Integer): Boolean; override;
      procedure SaveRTF(Stream: TStream; RVData: TPersistent; ItemNo: Integer;
        const Name: String; TwipsPerPixel: Double; Level: Integer; ColorList: TRVColorList;
        StyleToFont, ListOverrideOffsetsList1, ListOverrideOffsetsList2: TRVIntegerList;
        FontTable: TRVList); override;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override;
      function GetImageHeight(RVStyle: TRVStyle): Integer; override;
      function GetImageWidth(RVStyle: TRVStyle): Integer; override;
      procedure MovingToUndoList(ItemNo: Integer; RVData, AContainerUndoItem: TObject); override;
      procedure MovingFromUndoList(ItemNo: Integer; RVData: TObject); override;
      procedure Inserting(RVData: TObject; var Text: String; Safe: Boolean); override;
      procedure Focusing; override;
      procedure OnDocWidthChange(DocWidth: Integer; dli: TRVDrawLineInfo; Printing: Boolean;
                                 Canvas: TCanvas; RVData: TPersistent; sad: PRVScreenAndDevice;
                                 var HShift: Integer; NoCaching: Boolean); override;
      property MinHeightOnPage: Integer read FMinHeightOnPage write FMinHeightOnPage;
  end;

  TRVGraphicItemInfo = class (TRVRectItemInfo)
    protected
      function GetHeight: Integer; override;
      function GetWidth: Integer; override;
      function GetRVFExtraPropertyCount: Integer; override;
      procedure SaveRVFExtraProperties(Stream: TStream); override;
    public
      Image, ImageCopy: TGraphic;
      ImageWidth, ImageHeight : Integer;
      constructor CreateEx(RVData: TPersistent; AImage: TGraphic; AVAlign: TRVVAlign); virtual;
      procedure Assign(Source: TCustomRVItemInfo); override;
      function SetExtraIntProperty(Prop: TRVExtraItemProperty; Value: Integer): Boolean; override;
      function GetExtraIntProperty(Prop: TRVExtraItemProperty; var Value: Integer): Boolean; override;
      procedure UpdatePaletteInfo(PaletteAction: TRVPaletteAction;
                                  ForceRecreateCopy: Boolean;
                                  Palette: HPALETTE;
                                  LogPalette: PLogPalette); override;
      function GetMinWidth(sad: PRVScreenAndDevice; Canvas: TCanvas; RVData: TPersistent): Integer; override;
      destructor Destroy; override;
      function AsImage: TGraphic; override;
      procedure Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates;
                      Style: TRVStyle; dli: TRVDrawLineInfo); override;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; 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;
      procedure SaveRTF(Stream: TStream; RVData: TPersistent; ItemNo: Integer;
        const Name: String; TwipsPerPixel: Double; Level: Integer; ColorList: TRVColorList;
        StyleToFont, ListOverrideOffsetsList1, ListOverrideOffsetsList2: TRVIntegerList;
        FontTable: TRVList); override;
      function PrintToBitmap(Bkgnd: TBitmap; Preview: Boolean; RichView: TRVScroller;
                             dli: TRVDrawLineInfo; Part: Integer):Boolean; override;
      procedure Print(Canvas: TCanvas; x,y,x2: Integer; Preview, Correction: Boolean;
                      const sad: TRVScreenAndDevice; RichView: TRVScroller;
                      dli: TRVDrawLineInfo;
                      Part: Integer); override;
      function GetImageHeight(RVStyle: TRVStyle): Integer; override;
      function GetImageWidth(RVStyle: TRVStyle): Integer; override;
      procedure MovingToUndoList(ItemNo: Integer; RVData, AContainerUndoItem: TObject); override;
      function CreatePrintingDrawItem(RVData: TObject; const sad: TRVScreenAndDevice): TRVDrawLineInfo; override;
      property MinHeightOnPage: Integer read FMinHeightOnPage write FMinHeightOnPage;
  end;

  TRVGraphicItemInfoClass = class of TRVGraphicItemInfo;

  TRVHotGraphicItemInfo = class(TRVGraphicItemInfo)
    public
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override;
      constructor CreateEx(RVData: TPersistent; AImage: TGraphic; AVAlign: TRVVAlign); override;
      procedure Execute(RVData:TPersistent); override;
  end;

  TRVBulletItemInfo = class (TRVRectItemInfo)
    protected
      function GetHeight: Integer; override;
      function GetWidth: Integer; override;
      function GetImageIndex(Hot: Boolean): Integer; virtual;
      function SaveRVFHeaderTail(RVData: TPersistent): String; override;
    public
      ImageList: TCustomImageList;
      ImageIndex: Integer;
      constructor CreateEx(RVData: TPersistent; AImageIndex: Integer; AImageList: TCustomImageList; AVAlign: TRVVAlign);
      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;
      procedure Assign(Source: TCustomRVItemInfo); override;
      function GetMinWidth(sad: PRVScreenAndDevice; Canvas: TCanvas; RVData: TPersistent): Integer; override;
      procedure Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates;
                      Style: TRVStyle; dli: TRVDrawLineInfo); override;
      function PrintToBitmap(Bkgnd: TBitmap; Preview: Boolean; RichView: TRVScroller;
                             dli: TRVDrawLineInfo; Part: Integer):Boolean; override;                      
      function ReadRVFHeader(var P: PChar; RVData: TPersistent): Boolean; 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;
      procedure SaveRTF(Stream: TStream; RVData: TPersistent; ItemNo: Integer;
        const Name: String; TwipsPerPixel: Double; Level: Integer; ColorList: TRVColorList;
        StyleToFont, ListOverrideOffsetsList1, ListOverrideOffsetsList2: TRVIntegerList;
        FontTable: TRVList); override;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetImageHeight(RVStyle: TRVStyle): Integer; override;
      function GetImageWidth(RVStyle: TRVStyle): Integer; override;
  end;

  TRVHotspotItemInfo = class (TRVBulletItemInfo)
    protected
      function GetImageIndex(Hot: Boolean): Integer; override;
      function SaveRVFHeaderTail(RVData: TPersistent): String; override;
    public
      HotImageIndex: Integer;
      constructor CreateEx(RVData: TPersistent; AImageIndex, AHotImageIndex: Integer;
                           AImageList: TCustomImageList; AVAlign: TRVVAlign);
      procedure Assign(Source: TCustomRVItemInfo); override;
      function ReadRVFHeader(var P: PChar; RVData: TPersistent): Boolean; override;
      procedure SaveRVF(Stream: TStream; RVData: TPersistent; ItemNo, ParaNo: Integer;
                        const Name: String; Part: TRVMultiDrawItemPart;
                        ForceSameAsPrev: Boolean); override;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean;override;
      procedure Execute(RVData:TPersistent);override;
  end;

  TRVBreakItemInfo = class (TRVFullLineItemInfo)
    protected
      function SaveRVFHeaderTail(RVData: TPersistent): String; override;
    public
      LineWidth: Byte;
      Style: TRVBreakStyle;
      Color: TColor;
      constructor CreateEx(RVData: TPersistent; ALineWidth: Byte; AStyle: TRVBreakStyle; AColor: TColor);
      procedure Assign(Source: TCustomRVItemInfo); override;
      procedure PaintFullWidth(Left, Right, Top: Integer; Canvas: TCanvas;
                      State: TRVItemDrawStates;
                      Style: TRVStyle; const ClipRect: TRect;
                      dli: TRVDrawLineInfo); override;
      procedure Print(Canvas: TCanvas; x,y,x2: Integer; Preview, Correction: Boolean;
                      const sad: TRVScreenAndDevice; RichView: TRVScroller;
                      dli: TRVDrawLineInfo;
                      Part: Integer); 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 ReadRVFHeader(var P: PChar; RVData: TPersistent): Boolean; override;
      procedure SaveRVF(Stream: TStream; RVData: TPersistent; ItemNo, ParaNo: Integer;
                        const Name: String; Part: TRVMultiDrawItemPart;
                        ForceSameAsPrev: Boolean); override;
      procedure SaveRTF(Stream: TStream; RVData: TPersistent; ItemNo: Integer;
        const Name: String; TwipsPerPixel: Double; Level: Integer; ColorList: TRVColorList;
        StyleToFont, ListOverrideOffsetsList1, ListOverrideOffsetsList2: TRVIntegerList;
        FontTable: TRVList); override;
      procedure FillRTFTables(ColorList: TRVColorList; ListOverrideCountList: TRVIntegerList;
        RVData: TPersistent); override;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean;override;

  end;

  function RV_DuplicateItem(Source: TCustomRVItemInfo; RVData: TPersistent): TCustomRVItemInfo;
  procedure RegisterRichViewItemClass(StyleNo: Integer; ItemClass: TCustomRVItemInfoClass);
  function CreateRichViewItem(StyleNo: Integer; RVData: TPersistent): TCustomRVItemInfo;
  function RVFGetItemOptions(ItemOptions: TRVItemOptions; ForceSameAsPrev: Boolean): TRVItemOptions;
  procedure RVSaveImageToRTF(Stream: TStream; TwipsPerPixel: Double;
    Image: TGraphic; ImageWidth, ImageHeight: Integer; Options: TRVRTFOptions);
  procedure RVSaveImageListImageToRTF(Stream: TStream;
    TwipsPerPixel: Double; ImageList: TCustomImageList; ImageIndex: Integer;
    RTFOptions: TRVRTFOptions);
  procedure RVSaveImageSharedImageInHTML(ImageList: TCustomImageList;
    ImageIndex: Integer; Graphic: TGraphic; var Location: String;
    RVData: TPersistent; const Path,
    imgSavePrefix: String; var imgSaveNo: Integer; CurrentFileColor: TColor;
    SaveOptions: TRVSaveOptions;
    Bullets: TRVList);
  function RV_GetExtraIMGStr(SaveOptions: TRVSaveOptions; Width, Height: Integer): String;    

var
  RichViewTextItemClass: TRVTextItemInfoClass;

const
  RVItemOptionsMask = $0F;

implementation
uses RVFMisc,RichView, PtblRV, PtRVData, CRVData, CRVFData, RVUni, RVStr, CtrlImg
     {$IFNDEF RVDONOTUSELISTS}
     , RVMarker
     {$ENDIF}
     ;
procedure RichView_InitializeList; forward;
{============================= TRVCPInfo ======================================}
procedure TRVCPInfo.Assign(Source: TRVCPInfo; TagsArePChars: Boolean);
begin
  Name       := Source.Name;
  RaiseEvent := Source.RaiseEvent;
  Tag        := RV_CopyTag(Source.Tag, TagsArePChars)
  //DrawItemNo, Next, Prev, ItemInfo are not copied
end;
{------------------------------------------------------------------------------}
function TRVCPInfo.CreateCopy(TagsArePChars: Boolean): TRVCPInfo;
begin
  Result := TRVCPInfo.Create;
  Result.Assign(Self,TagsArePChars);
end;
{========================= TRVImagePrintPart ==================================}
type
  TRVImagePrintPart = class (TRVMultiDrawItemPart)
    public
      ImgTop, ImgHeight: Integer;
      function GetSoftPageBreakInfo: Integer; override;
  end;

function TRVImagePrintPart.GetSoftPageBreakInfo: Integer;
begin
  Result := ImgTop;
end;
{========================= TRVMultiImagePrintInfo =============================}
type
  TRVMultiImagePrintInfo = class (TRVMultiDrawItemInfo)
    private
      sad: TRVScreenAndDevice;
      FItem: TRVRectItemInfo;
    public
      constructor Create(AItem: TRVRectItemInfo);
      procedure SetSize(AWidth, AHeight: Integer); override;
      function InitSplit: Boolean; override;
      function CanSplitFirst(Y: Integer): Boolean; override;
      function SplitAt(Y: Integer): Boolean; override;
  end;
{------------------------------------------------------------------------------}
constructor TRVMultiImagePrintInfo.Create(AItem: TRVRectItemInfo);
begin
  inherited Create;
  FItem := AItem;
end;
{------------------------------------------------------------------------------}
function TRVMultiImagePrintInfo.CanSplitFirst(Y: Integer): Boolean;
begin
  Y := MulDiv(Y, sad.ppiyScreen, sad.ppiyDevice);
  Result :=
    (Y>0) and
    FItem.GetBoolValueEx(rvbpPrintToBMP, nil) and
    (FItem.FMinHeightOnPage>0) and
    (Y>=FItem.FMinHeightOnPage) and
    ((FItem.GetImageHeight(nil)-Y >= FItem.FMinHeightOnPage) or
     (Y>FItem.GetImageHeight(nil)));
end;
{------------------------------------------------------------------------------}
function TRVMultiImagePrintInfo.InitSplit: Boolean;
var part: TRVImagePrintPart;
begin
  Result := FItem.FMinHeightOnPage<>0;
  if not Result then
    exit;
  part := TRVImagePrintPart.Create;
  part.ImgTop := 0;
  part.ImgHeight := FItem.GetImageHeight(nil);
  part.Height := MulDiv(part.ImgHeight, sad.ppiyDevice, sad.ppiyScreen);
  PartsList.Add(part);
end;
{------------------------------------------------------------------------------}
function TRVMultiImagePrintInfo.SplitAt(Y: Integer): Boolean;
var PrevHeight, NewHeight, PrevTop: Integer;
    part: TRVImagePrintPart;
begin
  if FItem.FMinHeightOnPage<=0 then begin

⌨️ 快捷键说明

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