📄 rvstyle.pas
字号:
{=============================} unit RVStyle; {=========================}
{ unit RVStyle: }
{ components: }
{ TRVStyle (registered in "RichView" palette page) }
{-----------------------------------------------------------------------}
{ Copyright (C) S.Tkachenko }
{=======================================================================}
interface
{$R RVStyle}
{$I RV_Defs.inc}
{$IFDEF RICHVIEWDEF6}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
IniFiles, Registry,
{$IFDEF RICHVIEWDEF4}
ImgList,
{$ENDIF}
RVClasses, RVMapWht, RVScroll;
const
crJump = 101;
rvsNormal = 0;
rvsHeading = 1;
rvsSubheading = 2;
rvsKeyword = 3;
rvsJump1 = 4;
rvsJump2 = 5;
rvsBreak = -1;
rvsCheckpoint = -2;
rvsPicture = -3;
rvsHotspot = -4;
rvsComponent = -5;
rvsBullet = -6;
rvsBack = -7;
rvsVersionInfo= -8;
rvsDocProperty= -9;
rvsHotPicture = -10;
rvsListMarker = -11;
LAST_DEFAULT_STYLE_NO = rvsJump2;
type
TRVScreenAndDevice = record
ppixScreen, ppiyScreen, ppixDevice, ppiyDevice: Integer;
LeftMargin, RightMargin: Integer;
end;
PRVScreenAndDevice= ^TRVScreenAndDevice;
TParaInfo = class;
TRVSaveFormat = (rvsfText,
rvsfHTML,
rvsfRTF,
rvsfRVF
);
TRVLoadFormat = (rvlfText,
rvlfHTML, // <- not implemented
rvlfRTF,
rvlfRVF,
rvlfOther
);
TRVRTFSaveArea = (rv_rtfs_TextStyle, rv_rtfs_ParaStyle, rv_rtfs_CellProps, rv_rtfs_RowProps,
rv_rtfs_Doc);
TRVHTMLSaveArea = (rv_thms_Head, rv_thms_BodyAttribute, rv_thms_Body);
TRVReaderUnicode = (rvruMixed, rvruNoUnicode, rvruOnlyUnicode);
TRVReaderStyleMode = (rvrsUseSpecified, rvrsUseClosest, rvrsAddIfNeeded);
TRVFReaderStyleMode = (rvf_sIgnore, rvf_sInsertMap, rvf_sInsertMerge);
TRVCodePage = type cardinal;
TCheckpointData = type Pointer;
TRVStyle = class;
TRVTextDrawState = (rvtsSelected, rvtsHover, rvtsItemStart, rvtsItemEnd,
rvtsDrawItemStart, rvtsDrawItemEnd,
rvtsControlFocused);
TRVTextDrawStates = set of TRVTextDrawState;
TRVDrawTextBackEvent = procedure (Sender: TRVStyle; Canvas: TCanvas; StyleNo: Integer;
Left, Top, Width, Height: Integer;
DrawState: TRVTextDrawStates;
var DoDefault: Boolean) of object;
TRVApplyStyleEvent = procedure (Sender: TRVStyle; Canvas: TCanvas; StyleNo: Integer;
var DoDefault: Boolean) of object;
TRVApplyStyleColorEvent = procedure (Sender: TRVStyle; Canvas: TCanvas;
StyleNo: Integer;
DrawState: TRVTextDrawStates;
var DoDefault: Boolean) of object;
TRVDrawStyleTextEvent = procedure (Sender: TRVStyle;
const s: String;
Canvas: TCanvas;
StyleNo: Integer;
SpaceBefore, Left, Top, Width, Height: Integer;
DrawState: TRVTextDrawStates;
var DoDefault: Boolean) of object;
TRVStyleHoverSensitiveEvent = procedure (Sender: TRVStyle;
StyleNo: Integer;
var Sensitive: Boolean) of object;
TRVDrawCheckpointEvent = procedure (Sender: TRVStyle; Canvas: TCanvas;
X,Y, ItemNo, XShift: Integer;
RaiseEvent: Boolean;
Control: TControl;
var DoDefault: Boolean) of object;
TRVPageBreakType = (rvpbSoftPageBreak, rvpbPageBreak);
TRVDrawPageBreakEvent = procedure (Sender: TRVStyle; Canvas: TCanvas;
Y, XShift: Integer;
PageBreakType: TRVPageBreakType;
Control: TControl;
var DoDefault: Boolean) of object;
TRVDrawParaRectEvent = procedure (Sender: TRVStyle; Canvas: TCanvas;
ParaNo: Integer;
ARect: TRect; var DoDefault: Boolean) of object;
TRVBreakStyle = (rvbsLine, rvbsRectangle, rvbs3d);
TRVVAlign = (rvvaBaseline, // bottom of picture -> baseline
rvvaMiddle // center of picture -> baseline
// may be in future:
//rvvaAbsTop, // top of picture -> top of line
//rvvaAbsBottom, // bottom of picture -> bottom of line
//rvvaAbsMiddle // center of picture -> center of line
);
{-----------------------------------------------------------------------}
// Options for saving/loading RVF files/streams
TRVFOption = (rvfoSavePicturesBody,
rvfoSaveControlsBody,
rvfoIgnoreUnknownPicFmt,
rvfoIgnoreUnknownCtrls,
rvfoConvUnknownStylesToZero,
rvfoConvLargeImageIdxToZero,
rvfoSaveBinary,
rvfoUseStyleNames,
rvfoSaveBack,
rvfoLoadBack,
rvfoSaveTextStyles,
rvfoSaveParaStyles,
rvfoSaveLayout,
rvfoLoadLayout);
TRVFOptions = set of TRVFOption;
// Warnings for loading RVF files/streams
TRVFWarning = (
rvfwUnknownPicFmt,
rvfwUnknownCtrls,
rvfwConvUnknownStyles,
rvfwConvLargeImageIdx,
rvfwConvToUnicode,
rvfwConvFromUnicode,
rvfwInvalidPicture
);
TRVFWarnings = set of TRVFWarning;
// Identifies an action with controls inserted in RichView
TRVControlAction = (rvcaAfterRVFLoad,
rvcaDestroy, rvcaMoveToUndoList,
rvcaMoveFromUndoList, rvcaDestroyInUndoList,
rvcaBeforeRVFSave, rvcaAfterRVFSave);
// Action with items
TRVItemAction = (rviaInserting, rviaTextModifying, rviaDestroying, rviaMovingToUndoList);
// Options for protected text
TRVProtectOption = (rvprStyleProtect,
rvprModifyProtect, rvprDeleteProtect,
rvprConcateProtect,
rvprRVFInsertProtect,
rvprDoNotAutoSwitch,
rvprParaStartProtect,
rvprSticking);
TRVProtectOptions = set of TRVProtectOption;
// Options for paragraph styles
TRVParaOption = (rvpaoNoWrap, rvpaoReadOnly, rvpaoStyleProtect,
rvpaoDoNotWantReturns);
TRVParaOptions = set of TRVParaOption;
TRVTextOption = (rvteoHTMLCode, rvteoRTFCode);
TRVTextOptions = set of TRVTextOption;
// Options for saving HTML files
TRVSaveOption = (rvsoOverrideImages, rvsoFirstOnly, rvsoMiddleOnly, rvsoLastOnly,
rvsoDefault0Style, rvsoNoHypertextImageBorders,
rvsoImageSizes, rvsoForceNonTextCSS, rvsoUseCheckpointsNames,
rvsoMarkersAsText);
TRVSaveOptions = set of TRVSaveOption;
// Options for saving RTF files
TRVRTFOption = (rvrtfSaveStyleSheet,
rvrtfDuplicateUnicode, rvrtfSaveEMFAsWMF,
rvrtfSaveJpegAsJpeg, rvrtfSaveBitmapDefault,
rvrtfSaveEMFDefault);
TRVRTFOptions = set of TRVRTFOption;
{-----------------------------------------------------------------------}
TRVFontStyle = (rvfsOverline, rvfsAllCaps);
TRVFontStyles = set of TRVFontStyle;
TRVAlignment = (rvaLeft, rvaRight, rvaCenter, rvaJustify);
{$IFDEF RICHVIEWDEF4}
TRVIniFile = TCustomIniFile;
{$ELSE}
TRVIniFile = TIniFile;
{$ENDIF}
TRVSaveCSSOption = (rvcssOnlyDifference, rvcssIgnoreLeftAlignment);
TRVSaveCSSOptions = set of TRVSaveCSSOption;
{-----------------------------------------------------------------------}
TRVFontInfoProperty = (rvfiFontName, rvfiSize, rvfiCharset, rvfiUnicode,
rvfiBold, rvfiItalic, rvfiUnderline, rvfiStrikeout,
rvfiOverline, rvfiAllCaps,
rvfiVShift, rvfiColor, rvfiBackColor,
rvfiJump,
rvfiHoverBackColor, rvfiHoverColor,
rvfiJumpCursor, rvfiNextStyleNo,
rvfiProtection, rvfiCharScale, rvfiBaseStyleNo,
rvfiBiDiMode, rvfiCharSpacing,
rvfiHTMLCode, rvfiRTFCode
{$IFDEF RVLANGUAGEPROPERTY}
, rvfiLanguage
{$ENDIF}
);
TRVParaInfoProperty = (rvpiFirstIndent, rvpiLeftIndent, rvpiRightIndent,
rvpiSpaceBefore, rvpiSpaceAfter, rvpiAlignment,
rvpiNextParaNo, rvpiLineSpacing, rvpiLineSpacingType,
rvpiBackground_Color,
rvpiBackground_BO_Left, rvpiBackground_BO_Top,
rvpiBackground_BO_Right, rvpiBackground_BO_Bottom,
rvpiBorder_Color, rvpiBorder_Style,
rvpiBorder_Width, rvpiBorder_InternalWidth,
rvpiBorder_BO_Left,
rvpiBorder_BO_Top,
rvpiBorder_BO_Right,
rvpiBorder_BO_Bottom,
rvpiBorder_Vis_Left,
rvpiBorder_Vis_Top,
rvpiBorder_Vis_Right,
rvpiBorder_Vis_Bottom,
rvpiNoWrap,
rvpiReadOnly,
rvpiStyleProtect,
rvpiDoNotWantReturns,
rvpiBiDiMode);
TRVFontInfoProperties = set of TRVFontInfoProperty;
TRVParaInfoProperties = set of TRVParaInfoProperty;
TRVLineSpacingType = (rvlsPercent, rvlsSpaceBetween {, rvlsAtLeast});
TRVStyleMergeMode = (rvs_merge_SmartMerge, rvs_merge_Map, rvs_merge_Append);
{-----------------------------------------------------------------------}
TCustomRVInfo = class(TCollectionItem)
private
FBaseStyleNo: Integer;
FName: String;
FStandard: Boolean;
protected
function IsSimpleEqual(Value: TCustomRVInfo; IgnoreReferences: Boolean): Boolean; dynamic; abstract;
function IsSimpleEqualEx(Value: TCustomRVInfo; Mapping: TRVIntegerList): Boolean; dynamic; abstract;
function SimilarityValue(Value: TCustomRVInfo): Integer; dynamic; abstract;
public
constructor Create(Collection: TCollection); override;
procedure Assign(Source: TPersistent); override;
{$IFDEF RICHVIEWCBDEF3}
function GetDisplayName: String; override;
{$ENDIF}
procedure SaveToINI(ini: TRVIniFile; const Section, fs: String);
procedure LoadFromINI(ini: TRVIniFile; const Section, fs, DefName: String);
published
property BaseStyleNo: Integer read FBaseStyleNo write FBaseStyleNo default -1;
property StyleName: String read FName write FName;
property Standard: Boolean read FStandard write FStandard default True;
end;
{-----------------------------------------------------------------------}
TFontInfo = class(TCustomRVInfo)
private
{ Private declarations }
FBiDiMode: TRVBiDiMode;
FJump: Boolean;
FJumpCursor: TCursor;
FFontName: TFontName;
FSize: Integer;
FColor, FBackColor, FHoverColor, FHoverBackColor: TColor;
FStyle: TFontStyles;
FStyleEx: TRVFontStyles;
FVShift: Integer;
FNextStyleNo: Integer;
{$IFDEF RICHVIEWCBDEF3}
FCharset: TFontCharset;
{$ENDIF}
{$IFDEF RVLANGUAGEPROPERTY}
FLanguage: Cardinal;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -