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