zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    Jump Game II
    Trapping Rain Water
    First Missing Positive
    Median of Two Sorted Arrays
    noip2012开车旅行 题解
    AC自动机专题总结
    初探数位DP
    斯坦纳树 [bzoj2595][wc2008]游览计划 题解
    [bzoj3244][noi2013]树的计数 题解
    网络流模型小结
  • 原文地址:https://www.cnblogs.com/txgh/p/15170019.html
Copyright © 2011-2022 走看看