📄 rvitem.pas
字号:
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 + -