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

📄 rvtable.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      CachedItemNo: Integer;
      MyTop, MyLeft: Integer;
      MyClientTop, MyClientLeft: Integer;
      MouseRow, MouseCol: Integer;
      DRMin, DRMax, DRNo, DRDelta: Integer;
      FRows: TRVTableRows;
      FCellVSpacing,FCellHSpacing: Integer;
      FCellPadding: Integer;
      FBestWidth: TRVHTMLLength;
      FBorderWidth: Integer;
      FBorderColor: TColor;
      FColor: TColor;
      FCellBorderWidth: Integer;
      FHRuleWidth: Integer;
      FVRuleWidth: Integer;
      FHRuleColor: TColor;
      FCellBorderColor: TColor;
      FVRuleColor: TColor;
      FBorderStyle: TRVTableBorderStyle;
      FCellBorderStyle: TRVTableBorderStyle;
      FBorderHSpacing: Integer;
      FBorderVSpacing: Integer;
      FHOutermostRule: Boolean;
      FVOutermostRule: Boolean;
      FCellBorderLightColor: TColor;
      FBorderLightColor: TColor;
      FSelStartCol, FSelStartRow, FSelColOffs, FSelRowOffs: Integer;
      BusyCount: Integer;
      FOptions: TRVTableOptions;
      FPrintOptions: TRVTablePrintOptions;
      FStoredInplace: TRVTableInplaceParamStorage;
      FMinWidthPlus, FInplaceMinWidthPlus: Integer;
      FTextRowSeparator: String;
      FTextColSeparator: String;
      FocusedCellRow,FocusedCellCol: Integer;
      ChosenCellRow,ChosenCellCol: Integer;
      StreamSaveStartRow, StreamSaveRowCount: Integer;
      FOnDrawBorder: TRVTableDrawBorderEvent;
      FHeadingRowCount: Integer;
      function GetCells(Row, Col: Integer): TRVTableCellData;
      procedure SetCells(Row, Col: Integer; const Value: TRVTableCellData);
      procedure SetBestWidth(const Value: TRVHTMLLength);
      function GetVerticalRuleNo(X: Integer; var MinX, ZeroChangeX: Integer): Integer;
      function GetHorizontalRuleNo(Y: Integer; var MinY, ZeroChangeY: Integer): Integer;
      function GetColNo(X: Integer): Integer;
      function GetRowNo(Y: Integer): Integer;
      function GetCrossed(Coord: Integer;List: TRVIntegerList): Integer;
      procedure UpdateCellXCoords(Fmt: TRVTableItemFormattingInfo; NoCaching: Boolean);
      procedure UpdateCellYCoords(Fmt: TRVTableItemFormattingInfo);
      function GetHorzExtra: Integer;
      procedure InplaceEditorChange(Sender: TCustomRichViewEdit; ClearRedo: Boolean);
      procedure InplaceEditorCaretGetout(Sender: TCustomRichViewEdit; Direction: TRVGetOutDirection);
      procedure InplaceEditorMouseDown(Sender: TCustomRichView; Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer);
      procedure InplaceEditorMouseUp(Sender: TCustomRichView; Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer);
      procedure InplaceEditorMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      procedure InplaceEditorDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
      procedure InplaceEditorDragDrop(Sender, Source: TObject; X, Y: Integer);
      procedure InplaceEditorControlAction(Sender: TCustomRichView; ControlAction: TRVControlAction; ItemNo: Integer;
                                     var ctrl: TControl);
      procedure DestroyInplace(ReformatCell:Boolean);
      procedure StoreRVSelection(RVData: TCustomRVFormattedData;
                             var storage: TRVTableInplaceParamStorage);
      procedure RestoreRVSelection(RVData: TCustomRVFormattedData;
                             const storage: TRVTableInplaceParamStorage);
      procedure Init(nRows, nCols: Integer; AMainRVData: TCustomRVData);
      procedure CellsWriter(Writer: TWriter);
      procedure CellsReader(Reader: TReader);
      procedure ClearTemporal;
      procedure SetBorderColor(const Value: TColor);
      procedure SetBorderHSpacing(const Value: Integer);
      procedure SetBorderLightColor(const Value: TColor);
      procedure SetBorderStyle(const Value: TRVTableBorderStyle);
      procedure SetBorderVSpacing(const Value: Integer);
      procedure SetBorderWidth(const Value: Integer);
      procedure SetCellBorderColorProp(const Value: TColor);
      procedure SetCellBorderLightColorProp(const Value: TColor);
      procedure SetCellBorderWidth(const Value: Integer);
      procedure SetCellHSpacing(const Value: Integer);
      procedure SetCellPadding(const Value: Integer);
      procedure SetCellVSpacing(const Value: Integer);
      procedure SetColor(const Value: TColor);
      procedure SetHOutermostRule(const Value: Boolean);
      procedure SetHRuleColor(const Value: TColor);
      procedure SetHRuleWidth(const Value: Integer);
      procedure SetVOutermostRule(const Value: Boolean);
      procedure SetVRuleColor(const Value: TColor);
      procedure SetVRuleWidth(const Value: Integer);
      procedure SetCellBorderStyle(const Value: TRVTableBorderStyle);
      procedure SetProperty(const PropertyName: String; Value: LongInt;
                            AffectSize, AffectWidth: Boolean);
      procedure SetCellProperty(ItemNo: Integer; const PropertyName: String; Value: LongInt;
                            Row,Col: Integer;
                            AffectSize, AffectWidth: Boolean);
      function IsFixedWidthTable: Boolean;
      function CompletelySelected: Boolean;
      procedure UnAssignActiveCell;
      function DoOnCellEditing(Row,Col: Integer; Automatic: Boolean): Boolean;
      function IsInEditor: Boolean;
      function CanUseHeadingRowCount: Boolean;
    procedure SetHeadingRowCount(const Value: Integer);
    protected
      Fmt: TRVTableItemFormattingInfo;
      cursad: PRVScreenAndDevice;
      procedure XorDrawing(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      function GetHeight: Integer; override;
      function GetWidth: Integer; override;

      procedure DrawBorder(Canvas: TCanvas;
                           Left,Top,Right,Bottom, Width: Integer;
                           LightColor, Color, BackgroundColor: TColor;
                           Style: TRVTableBorderStyle;
                           DrawEvenEmptyBorder, Printing: Boolean;
                           const ClipRect: TRect;
                           VisibleBorders: TRVBooleanRect;
                           r,c: Integer);
      function GetCellAt_(X,Y: Integer; var Row,Col: Integer): Boolean;
      procedure UpdateCellSel;
      procedure PaintTo(Left, Right, Top, FromRow, RowCount: Integer; Canvas: TCanvas;
                      State: TRVItemDrawStates;
                      Style: TRVStyle;
                      Fmt: TRVTableItemFormattingInfo;
                      UseHeadingRowCount: Boolean;
                      const ClipRect: TRect);
      function GetDevX(x: Integer): Integer;
      function GetDevY(y: Integer): Integer;
      procedure InternalOnDocWidthChange(DocWidth: Integer;
                                         Fmt: TRVTableItemFormattingInfo;
                                         Canvas: TCanvas;
                                         NoCaching: Boolean);
      procedure Change;
      procedure ChangeEx(ClearRedo: Boolean);
      function BeginModify(ItemNo: Integer): Integer;
      procedure EndModify(ItemNo, Data: Integer);
      function GetCellColor(Cell: TRVTableCellData): TColor;
      function GetSplitRowBelow(Row: Integer): Integer;
      function GetSplitRowAbove(Row: Integer): Integer;
      function BeforeChange: Boolean;
      function CanChange: Boolean;
      procedure InitUndo;
      procedure DoneUndo;
      procedure AssignCellAttributes(ItemNo,Row,Col: Integer; SourceCell: TRVTableCellData;
                                     IncludeSize: Boolean;
                                     DivColSpan, DivRowSpan: Integer);
      procedure SetCellBestWidth_(ItemNo: Integer; Value: TRVHTMLLength; Row,Col: Integer);
      procedure SetCellBestHeight_(ItemNo: Integer; Value: Integer; Row,Col: Integer);
      procedure SetCellColor_(ItemNo: Integer; Value: TColor; Row,Col: Integer);
      procedure SetCellVisibleBorders_(ItemNo: Integer; Left, Top, Right, Bottom: Boolean; Row,Col: Integer);
      procedure SetCellBorderColor_(ItemNo: Integer; Value: TColor; Row,Col: Integer);
      procedure SetCellBorderLightColor_(ItemNo: Integer; Value: TColor; Row,Col: Integer);      
      procedure SetCellVAlign_(ItemNo: Integer; Value: TRVCellVAlign; Row,Col: Integer);
      procedure SetRowVAlign_(ItemNo: Integer; Value: TRVCellVAlign; Row: Integer);
      function GetEditorItemNoForUndo: Integer;
      function CreateTemporalEditor: TCustomRichViewEdit;
      procedure ApplyToPartiallySelected(Operation: Integer; UserData: Integer);
      procedure ValidateFocused;
      procedure ValidateChosen;
      function CellIsChosen: Boolean;
      procedure AdjustFocus(Row,Col: Integer; TopLevelRVData: TPersistent; TopLevelItemNo: Integer);
      function UndoEnabled: Boolean;
      procedure ChooseSubRVData_(r,c: Integer);
      procedure EditCell_(Row,Col: Integer; Unquestioning: Boolean);
    public
      { Should be protected }
      FMakingSelection: Boolean;
      FInplaceEditor: TCustomRichViewEdit;
      function GetSoftPageBreakDY(Data: Integer): Integer; override;
      function GetMyItemNo: Integer;      
      procedure SaveRowsToStream(Stream: TStream; Index, Count: Integer);
      procedure ResetSubCoords; override;
      function GetSubRVDataAt(X,Y: Integer): TPersistent; override;
      function GetCellWhichOwnsControl(AControl: TControl; var ARow,ACol, AItemNo: Integer): Boolean;
      function AdjustFocusToControl(Control: TControl; var TopLevelRVData: TPersistent; var TopLevelItemNo: Integer):Boolean;override;
      procedure Print(Canvas: TCanvas; x, y, x2: Integer; Preview, Correction: Boolean;
        const sad: TRVScreenAndDevice; RichView: TRVScroller;
        dli: TRVDrawLineInfo; Part: Integer); override;
      procedure CreateInplace(ItemNo, Row, Col: Integer; BuildJumps, CaretAtStart, CaretAtEnd, SetTime, Unquestioning: Boolean);
      procedure SetInplaceBounds(Left, Top, Width, Height: Integer);
      function StartSelecting(Row,Col: Integer): Boolean;
      procedure MovingToUndoList(ItemNo: Integer; RVData, AContainerUndoItem: TObject); override;
      procedure MovingFromUndoList(ItemNo: Integer; RVData: TObject); override;
      procedure FinalizeUndoGroup; override;
      procedure AdjustInserted(x,y: Integer; adjusty: Boolean); override;
      function OwnsControl(AControl: TControl): Boolean; override;
      function OwnsInplaceEditor(AEditor: TControl): Boolean; override;
      function GetMinWidth(sad: PRVScreenAndDevice; Canvas: TCanvas; RVData: TPersistent): Integer; override;
      procedure PaintFullWidth(Left, Right, Top: Integer; Canvas: TCanvas;
                      State: TRVItemDrawStates;
                      Style: TRVStyle; const ClipRect: TRect;
                      dli: TRVDrawLineInfo); override;
      procedure OnDocWidthChange(DocWidth: Integer; dli: TRVDrawLineInfo; Printing: Boolean; Canvas: TCanvas;
                                 RVData: TPersistent; sad: PRVScreenAndDevice;
                                 var HShift: Integer; NoCaching: Boolean); override;
      function MouseMove(Shift: TShiftState; X,Y,ItemNo: Integer; RVData: TObject):Boolean; override;
      function MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y,ItemNo: Integer; RVData: TObject):Boolean; override;
      function MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y,ItemNo: Integer; RVData: TObject):Boolean; override;
      procedure DeselectPartial; override;
      procedure MergeInplaceUndo(DestroyLists: Boolean);
      procedure InplaceDeleted(Clearing: Boolean);
      function PartiallySelected: Boolean; override;
      function CanDeletePartiallySelected: Boolean; override;
      procedure DeletePartiallySelected; override;
      function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override;
      function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override;
      procedure SaveRVF(Stream: TStream; RVData: TPersistent; ItemNo, ParaNo: Integer;
                        const Name: String; Part: TRVMultiDrawItemPart;
                        ForceSameAsPrev: 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 BeforeLoading(FileFormat: TRVLoadFormat); override;
      {$IFNDEF RVDONOTUSELISTS}
      procedure AfterLoading(FileFormat: TRVLoadFormat); override;
      {$ENDIF}
      function CreatePrintingDrawItem(RVData: TObject; const sad: TRVScreenAndDevice): TRVDrawLineInfo; override;
      procedure SaveInplace;
      procedure RestoreInplace;
      procedure StartExport; override;
      procedure EndExport; override;
      procedure MarkStylesInUse(UsedTextStyles, UsedParaStyles, UsedListStyles: TRVIntegerList); override;
      procedure UpdateStyles(TextStylesShift, ParaStylesShift, ListStylesShift: TRVIntegerList); override;
      procedure Inserting(RVData: TObject; var Text: String; Safe: Boolean); override;
      {$IFNDEF RVDONOTUSELISTS}
      procedure Inserted(RVData: TObject; ItemNo: Integer); override;
      {$ENDIF}
      procedure BeforeUndoChangeProperty; override;
      procedure AfterUndoChangeProperty; override;
      procedure ApplyParaStyleToPartiallySelected(ParaNo: Integer); override;
      procedure ApplyParaStyleConversionToPartiallySelected(UserData: Integer); override;
      procedure ApplyStyleConversionToPartiallySelected(UserData: Integer); override;
      function GetCellTo(Row,Col: Integer; Dir:TRVCellDirection;
        var NewRow,NewCol: Integer; Quiet: Boolean): Boolean;
      {$IFNDEF RVDONOTUSERTF}
      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;
      {$ENDIF}
      function AsText(LineWidth: Integer; RVData: TPersistent;
        const Text, Path: String; TextOnly,Unicode: Boolean): String; override;
      {$IFNDEF RVDONOTUSEHTML}
      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;
      {$ENDIF}
      function EnterItem(From: TRVEnterDirection; Coord: Integer): Boolean; override;
      procedure BuildJumps(Left,Top: Integer; var StartJumpNo: Integer; jumps: TList); override;
      function GetSubRVData(var StoreState: TRVStoreSubRVData; Position: TRVSubRVDataPos): TPersistent; override;
      procedure ChooseSubRVData(StoreState: TRVStoreSubRVData); override;
      procedure CleanUpChosen; override;
      { Public }
      constructor Create(RVData: TPersistent); override;
      constructor CreateEx(nRows, nCols: Integer; AMainRVData: TCustomRVData);
      destructor Destroy; override;
      procedure UnmergeCells(TopRow, LeftCol, ColSpan, RowSpan: Integer; UnmergeRows, UnmergeCols: Boolean);
      function CanMergeCells(TopRow, LeftCol, ColSpan, RowSpan: Integer;
                             AllowMergeRC: Boolean): Boolean;
      procedure MergeCells(TopRow, LeftCol, ColSpan, RowSpan: Integer; AllowMergeRC: Boolean);
      procedure MergeSelectedCells(AllowMergeRC: Boolean);
      function CanMergeSelectedCells(AllowMergeRC: Boolean): Boolean;
      procedure UnmergeSelectedCells(UnmergeRows, UnmergeCols: Boolean);
      procedure SplitSelectedCellsVertically(ColCount: Integer);
      procedure SplitSelectedCellsHorizontally(RowCount: Integer);
      function  IsCellSelected(Row, Col: Integer): Boolean;
      procedure InsertRows(Index, Count, CopyIndex: Integer
                           {$IFDEF RICHVIEWDEF4};Select:Boolean=True{$ENDIF});
      procedure InsertCols(Index, Count, CopyIndex: Integer
                           {$IFDEF RICHVIEWDEF4};Select:Boolean=True{$ENDIF});
      procedure InsertColsLeft(Count: Integer);
      procedure InsertColsRight(Count: Integer);
      procedure InsertRowsAbove(Count: Integer);
      procedure InsertRowsBelow(Count: Integer);
      procedure DeleteRows(Index, Count: Integer; DecreaseHeight: Boolean);
      procedure DeleteCols(Index, Count: Integer; DecreaseWidth: Boolean);
      procedure DeleteSelectedRows;
      procedure DeleteSelectedCols;
      procedure DeleteEmptyRows;
      procedure DeleteEmptyCols;
      function  GetCellAt(X,Y: Integer; var Row,Col: Integer): Boolean;
      procedure Select(StartRow, StartCol, RowOffs, ColOffs: Integer);
      procedure Deselect;
      procedure SelectRows(StartRow, Count: Integer);
      procedure SelectCols(StartCol, Count: Integer);
      function  GetSelectionBounds(var StartRow, StartCol, RowOffs, ColOffs: Integer): Boolean;
      function  GetNormalizedSelectionBounds(IncludeEditedCell: Boolean; var TopRow, LeftCol, ColSpan, RowSpan: Integer): Boolean;
      function GetEditedCell(var Row,Col: Integer): TCustomRichViewEdit;
      procedure SaveToStream(Stream: TStream);
      procedure LoadFromStream(Stream: TStream);
      procedure EditCell(Row,Col: Integer);
      procedure Changed;
      // Data
      property Rows: TRVTableRows read FRows;
      property Cells[Row, Col: Integer]: TRVTableCellData read GetCells write SetCells;

      procedure SetCellBestWidth(Value: TRVHTMLLength; Row,Col: Integer);

⌨️ 快捷键说明

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