delphi使用RichView控件 表格基本操作

TRichView表格基本操作

介绍

Unit RVTable

TRVTableItemInfo = class (TRVFullLineItemInfo)

TRVTableItemInfo 是表示 TRichView 文档中表格的类。 不是一个组件。 此类的对象在运行时创建并附加到 TRichView或插入到 TRichViewEdit。

项目类型标识符: rvsTable (-60)

属性

行垂直对齐方式TRVTableRow.VAlign

type
  TRVCellVAlign = 
    (rvcTop,  rvcMiddle, rvcBottom, rvcVDefault);
property VAlign:TRVCellVAlign;

定义行中单元格内容的垂直对齐方式。(在version 1.6 中引入)

  • rvcTop 顶端对齐
  • rvcMiddle 居中对齐
  • rvcBottom 底部对齐
  • rvcVDefault 工作方式类似于 rvcMiddle。

用户无法撤消/重做对此属性的直接分配,请使用 table.SetRowVAlign

默认值 rvcTop

单元格垂直对齐方式TRVTableCellData.VAlign

property VAlign: TRVCellVAlign;

定义单元格内容的垂直对齐方式。(在version 1.6 中引入)

  • rvcTop 顶端对齐
  • rvcMiddle 居中对齐
  • rvcBottom 底部对齐
  • rvcVDefault 行的垂直对齐方式,请参阅 TRVTableRow.VAlign

用户无法撤消/重做对此属性的直接分配,请使用 table.SetCellVAlign

如果单元格被旋转,VAlign 相对于单元格内容,而不是相对于单元格。 例如,如果单元格旋转 90°,则 rvcTop 将单元格内容对齐到右侧,rvcMiddle 垂直居中,rvcBottom 对齐到左侧。

默认值 rvcVDefault

行前分页符TRVTableRow.PageBreakBefore

property PageBreakBefore: Boolean;

允许在此行之前设置显式分页符。(在version 10 中引入)

如果至少一行具有 PageBreaksBefore=True,则默认table.PrintOptions 中有rvtoRowsSplit(忽略 table.PrintOptions 中缺少 rvtoRowsSplit)。

用户无法撤消/重做对此属性的直接分配,请使用 table.SetRowPageBreakBefore

默认值 False

方法

创建TRVTableItemInfo 对象TRVTableItemInfo.CreateEx

constructor CreateEx(nRows, nCols: Integer; AMainRVData: TCustomRVData);

创建一个具有 nRows 行和 nCols 列的新 TRVTableItemInfo 对象。

参数

nRows 行数。

nCols 列数。

RVData TRichView 或 TRichViewEdit 的 RVData 属性,在其中插入此表。

如果 nRows=0,则忽略 nCols,并创建 0x0 表。 仅当 表格的RowCount>0 时才存储多列。

设置行垂直对齐方式TRVTableItemInfo.SetRowVAlign

procedure SetRowVAlign(Value: TRVCellVAlign; Row: Integer);

Rows[Row].VAlign 赋值,作为编辑操作。

与直接分配给 Rows[Row] 属性不同,如果为在 TRichViewEdit 中插入的表(插入后)调用此方法,则可以撤消/重做此方法。

设置单元格垂直对齐方式TRVTableItemInfo.SetCellVAlign

procedure SetCellVAlign(Value: TRVCellVAlign; Row,Col: Integer);

Cells[Row, Col].VAlign 赋值,作为编辑操作。

与直接分配给 Cells[Row, Col].VAlign 属性不同,如果为在 TRichViewEdit 中插入的表(插入后)调用此方法,则可以撤消/重做此方法。

设置行前分页符TRVTableItemInfo.SetRowPageBreakBefore

procedure SetRowPageBreakBefore(Value: Boolean; Row: Integer);

Cells[Row, Col].PageBreakBefore 赋值,作为编辑操作。

与直接分配给 Rows[Row] 属性不同,如果为在 TRichViewEdit 中插入的表(插入后)调用此方法,则可以撤消/重做此方法。

在单元格上方插入行TRVTableItemInfo.InsertRowsAbove

procedure InsertRowsAbove(Count: Integer);

在所选单元格(或正在编辑的单元格)上方插入指定行数。

如果表格没有选择或编辑单元格,则不执行任何操作。

格式化的文档才能调用此方法。

在单元格下方插入行TRVTableItemInfo.InsertRowsBelow

procedure InsertRowsBelow(Count: Integer);

在所选单元格(或正在编辑的单元格)下方插入指定行数。

如果表格没有选择或编辑单元格,则不执行任何操作。

格式化的文档才能调用此方法。

在指定位置插入行TRVTableItemInfo.InsertRows

procedure InsertRows(Index, Count, CopyIndex: Integer; Select: Boolean = True);

在索引指定的位置插入指定行数。

参数

Index 在指定行索引之前插入(要在最后一行之后插入索引为 RowCount)。

Count 要插入的行数。

CopyIndex 不等于-1,要从已有行(在插入之前)中复制属性用于新行的行索引。 颜色、背景、边框、大小、文本和段落样式被复制。

Select 插入后是否选择。

在单元格右侧插入列TRVTableItemInfo.InsertColsRight

procedure InsertColsRight(Count: Integer);

在所选单元格(或正在编辑的单元格)右侧插入指定列数。

如果表格没有选择或编辑单元格,则不执行任何操作。

格式化的文档才能调用此方法。

在单元格左侧插入列TRVTableItemInfo.InsertColsLeft

procedure InsertColsLeft(Count: Integer);

在所选单元格(或正在编辑的单元格)左侧插入指定列数。

如果表格没有选择或编辑单元格,则不执行任何操作。

格式化的文档才能调用此方法。

在指定位置插入列TRVTableItemInfo.InsertCols

procedure InsertCols(Index, Count, CopyIndex: Integer; Select: Boolean = True);

在索引指定的位置插入指定列数。

参数

Index 在指定列索引之前插入(要在最后一列之后插入索引为 ColCount)。

Count 要插入的列数。

CopyIndex 不等于-1,要从已有列(在插入之前)中复制属性用于新列的列索引。 颜色、背景、边框、大小、文本和段落样式被复制。

Select 插入后是否选择。

删除所选行TRVTableItemInfo.DeleteSelectedRows

procedure DeleteSelectedRows;

删除包含选定单元格的所有行。

此方法会删除包含选定单元格的所有行,即使并非这些行中的所有单元格都被选中。

正在编辑的单元格被认为是选中的。

格式化的文档才能调用此方法。

删除指定行TRVTableItemInfo.DeleteRows

procedure DeleteRows(Index, Count: Integer; DecreaseHeight: Boolean;
  EditCellAfter: Boolean = True);

从指定索引行开始删除指定行数。

参数

Index 要删除的开始行的索引,范围为 0..RowCount-1

Count 要删除的行数。

DecreaseHeight 为True时,则与已删除行(由于单元格合并)重叠的单元格的BestHeights 将减少(推荐)。

EditCellAfter 为True时,如果这个表格被插入到编辑器中,则编辑后的单元格在此操作后保持编辑状态; 或者,如果未编辑任何单元格,或已删除编辑的单元格,则下一行中的相应单元格将被编辑。 为 False时,则此操作后不会编辑任何单元格。

删除所选列TRVTableItemInfo.DeleteSelectedCols

procedure DeleteSelectedCols;

删除包含选定单元格的所有列。

此方法会删除包含所选单元格的所有列,即使并非这些列中的所有单元格都被选中。

正在编辑的单元格被视为已选中。

格式化的文档才能调用此方法。

删除指定列TRVTableItemInfo.DeleteCols

procedure DeleteCols(Index, Count: Integer; DecreaseWidth: Boolean;
  EditCellAfter: Boolean = True);

从指定索引列开始删除指定列数。

参数

Index 要删除的开始列的索引,范围为 0..ColCount-1

Count 要删除的列数。

DecreaseWidth 为True时,则与已删除列(由于单元格合并)重叠的单元格的BestWidths 将减少(推荐)。

EditCellAfter 为True时,如果这个表格被插入到编辑器中,则编辑后的单元格在此操作后保持编辑状态; 或者,如果未编辑任何单元格,或者已编辑的单元格被删除,则下一列中的相应单元格将被编辑。 为 False时,则此操作后不会编辑任何单元格。

例子

添加表格

uses RVTable;

procedure TForm1.Button1Click(Sender: TObject);
var
  Table: TRVTableItemInfo;
  Row, Col: Integer;
begin
  //创建4行3列的表格
  Table := TRVTableItemInfo.CreateEx(4, 3, RichViewEdit1.RVData);

  //设置表格背景色为透明
  Table.Color := clNone;
  //设置表格和单元格边框样式为平面
  Table.BorderStyle := rvtbColor;
  Table.CellBorderStyle := rvtbColor;
  //设置边框大小和间距大小
  Table.BorderWidth := 1;
  Table.BorderVSpacing := 2;
  Table.BorderHSpacing := 2;
  Table.CellBorderWidth := 1;

  //添加表格数据
  for Row := 0 to table.Rows.Count - 1 do
    for Col := 0 to table.Rows[Row].Count - 1 do
    begin
      //设置表格宽度和颜色
      Table.Cells[Row, Col].BestWidth := 40;
      Table.Cells[Row, Col].Color := clCream;
      //添加内容(先清除再添加,否则会出现一行空的)
      Table.Cells[Row, Col].Clear;
      //AddFmt后两个参数是要添加的字体样式和段落样式,如果段落样式传-1(默认值),会添加在同一行
      Table.Cells[Row, Col].AddFmt('%d,%d', [Row, Col], RichViewEdit1.CurTextStyleNo, RichViewEdit1.CurParaStyleNo);
    end;
  //将表格添加到文档中
  RichViewEdit1.InsertItem('', Table);
end; 

插入行和插入列

uses RVTable, RVItem;

procedure TForm1.Button2Click(Sender: TObject);
var
  Item: TCustomRVItemInfo;
  Table: TRVTableItemInfo;
  Data: Integer;
  Rve: TCustomRichViewEdit;
  ItemNo: Integer;
begin
  //获取当前选择的表格
  if not RichViewEdit1.CanChange or
    not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, Rve, Item) then
    Exit;
  Table := TRVTableItemInfo(Item);
  ItemNo := Rve.GetItemNo(Table);
  Rve.BeginItemModify(ItemNo, Data);
  //在选择的单元格上方插入一行(没有选择单元格时不执行)
  //Table.InsertRowsAbove(1);
  //在选择的单元格下方插入一行(没有选择单元格时不执行)
  //Table.InsertRowsBelow(1);
  //在第3行前插入一行,使用表格默认样式和颜色(不复制其他行样式),新增后不是选择状态
  Table.InsertRows(2, 1, -1, False);
  //在选择的单元格右侧插入一列(没有选择单元格时不执行)
  //Table.InsertColsRight(1);
  //在选择的单元格左侧插入一列(没有选择单元格时不执行)
  //Table.InsertColsLeft(1);
  //在第2列前插入2列,使用第2列的样式和颜色,新增后不是选择状态
  Table.InsertCols(1, 2, 1, False);
  Rve.EndItemModify(ItemNo, Data);
  Rve.Change;
end;

删除行和列

uses RVTable, RVItem;

procedure TForm1.Button3Click(Sender: TObject);
var
  Item: TCustomRVItemInfo;
  Table: TRVTableItemInfo;
  Data: Integer;
  Rve: TCustomRichViewEdit;
  ItemNo: Integer;
begin
  //获取当前选择的表格
  if not RichViewEdit1.CanChange or
    not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, Rve, Item) then
    Exit;
  Table := TRVTableItemInfo(Item);
  ItemNo := Rve.GetItemNo(Table);
  Rve.BeginItemModify(ItemNo, Data);
  //删除选择的行(没有选择单元格时不执行)
  //Table.DeleteSelectedRows;
  //从第3行开始删除1行
  Table.DeleteRows(2, 1, True);
  //删除选择的列(没有选择单元格时不执行)
  //Table.DeleteSelectedCols;
  //从第2列开始删除2列
  Table.DeleteCols(1, 2, True);
  Rve.EndItemModify(ItemNo, Data);
  Rve.Change;
end;
原文地址:https://www.cnblogs.com/txgh/p/15170019.html