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