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

📄 rvstyle.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{=============================} 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 + -