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;