zoukankan      html  css  js  c++  java
  • delphi使用RichView控件 表格编辑操作

    TRichView表格编辑操作

    介绍

    选择操作

    插入行和列:

    • TRVTableItemInfo.InsertColsLeft
    • TRVTableItemInfo.InsertColsRight
    • TRVTableItemInfo.InsertRowsAbove
    • TRVTableItemInfo.InsertRowsBelow

    删除行和列:

    • TRVTableItemInfo.DeleteSelectedCols
    • TRVTableItemInfo.DeleteSelectedRows

    单元格合并和取消合并:

    • TRVTableItemInfo.MergeSelectedCells (参考 TRVTableItemInfo.CanMergeSelectedCells
    • TRVTableItemInfo.UnmergeSelectedCells
    • TRVTableItemInfo.SplitSelectedCellsHorizontally
    • TRVTableItemInfo.SplitSelectedCellsVertically

    其他操作

    插入行和列:

    • TRVTableItemInfo.InsertCols
    • TRVTableItemInfo.InsertRows

    删除行和列:

    • TRVTableItemInfo.DeleteCols
    • TRVTableItemInfo.DeleteRows

    单元格合并和取消合并:

    • TRVTableItemInfo.MergeCells (参考 TRVTableItemInfo.CanMergeCells
    • TRVTableItemInfo.UnmergeCells
    • TRVTableItemInfo.DeleteEmptyRows, TRVTableItemInfo.DeleteEmptyCols (单元格合并后使用)

    分配表属性(作为编辑操作)

    分配表属性的方法:

    TRVTableItemInfo.SetTableVisibleBorders

    分配行属性的方法:

    TRVTableItemInfo.SetRowVAlign, TRVTableItemInfo.SetRowKeepTogether, TRVTableItemInfo.SetRowPageBreakBefore

    分配单元格属性的方法:

    • TRVTableItemInfo.SetCellColor, TRVTableItemInfo.SetCellBorderColor, TRVTableItemInfo.SetCellBorderLightColor
    • TRVTableItemInfo.SetCellVAlign
    • TRVTableItemInfo.SetCellRotation
    • TRVTableItemInfo.SetCellTag
    • TRVTableItemInfo.SetCellBestWidth, TRVTableItemInfo.SetCellBestHeight
    • TRVTableItemInfo.SetCellBackgroundImage, TRVTableItemInfo.SetCellBackgroundImageFileName, TRVTableItemInfo.SetCellBackgroundStyle
    • TRVTableItemInfo.SetCellHint
    • TRVTableItemInfo.SetCellVisibleBorders
    • TRVTableItemInfo.SetCellOpacity
    • TRVTableItemInfo.SetCellOptions

    查看器和编辑器中的操作

    如果在插入表之前执行了上述操作,则不需要添加任何操作。

    如果对插入到TRichView中的表进行这些操作,则需要调用Format方法更新文档视图。

    如果对插入到 TRichViewEdit 中的表执行这些操作,则需要一个特殊的步骤顺序:

    1. 检查 RichViewEdit.CanChange (对于 TDBRichViewEdit 尤其重要)
    2. 获取表格对象及其在编辑器中的位置(位置定义为该表插入的项目索引+编辑器(可以是根编辑器或单元格就地编辑器,下面简称rve)
    3. 为表调用 rve.BeginItemModify
    4. 执行操作
    5. 调用 rve.EndItemModify
    6. 调用 rve.Change

    撤消/重做

    您可以使用 SetUndoGroupMode 对多个操作进行分组,以便将它们作为一个整体撤消/重做

    获取表对象

    为了对表执行操作,您需要获取表对象。您可以使用TRichView.GetItem方法来完成

    TCustomRVItemInfo是RichView所有items的祖先类,包括表格(TRVTableItemInfo)。 此方法可用于任何类型的项目,因此您需要检查它是否为表格(使用is运算符,或检查 RichView.GetItemStyle(ItemNo)=rvsTable

    编辑器中的位置

    通常情况下,当你需要对编辑器中插入符号位置的项目进行操作时,你不知道当前项目是在根编辑器中,还是在单元格内部,或单元格就地编辑器中,等等。

    使用TRichViewEdit.GetCurrentItem方法可以获取插入符号位置的项目,但即使插入符号在表格内,可能当前项目也不是表格,而是单元格就地编辑器中的其他项目!

    问题可以用TRichViewEdit.GetCurrentItemEx方法解决,如果在插入符号的位置有给定类别的项目(即插入符号在表格的左侧或右侧),或者如果插入符号在给定类别的项目内(即插入符号在表格单元格中),返回 True ,输出参数ItemRichViewEdit 返回表格所在的编辑器,编辑器可以是根编辑器 或单元格就地编辑器

    示例

    // MyRichViewEdit:TRichViewEdit 是一个编辑器,在设计时放置在表单上。
    // 注意:大部分操作在 rve(由 GetCurrentItemEx 返回的编辑器),不在 MyRichViewEdit 中。
    var item: TCustomRVItemInfo;
        table: TRVTableItemInfo;
        Data: Integer;
        rve: TCustomRichViewEdit;
        ItemNo: Integer;
    begin
      if not MyRichViewEdit.CanChange or
         not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, item) then
        exit;
      table := TRVTableItemInfo(item);
      ItemNo := rve.GetItemNo(table);
    
      rve.BeginItemModify(ItemNo, Data);
      // 执行一些操作
      rve.EndItemModify(ItemNo, Data);
      rve.Change;
    end;
    

    方法

    TCustomRichViewEdit.CanChange

    能否修改编辑器中的文档。

    function CanChange: Boolean;
    

    此函数检查 ReadOnly 属性。

    通常在对表格执行操作之前调用此函数,以防止修改处于只读状态的编辑器。

    对于TDBRichViewEdit,该函数还将编辑器的数据集转为编辑模式(需要在对表进行操作之前)。

    只有在格式化文档时才必须调用此方法。

    TCustomRichView.GetItem

    function GetItem(ItemNo: Integer): TCustomRVItemInfo;
    

    通过索引 ItemNo 返回文档中一项的对象

    参数

    ItemNo 项目的索引(从 0 到 ItemCount-1)。

    返回值 项目的对象。不要自己释放这个对象。

    子文档的项目(表格单元格)不包含在主文档的项目范围内; 对于单元格中的项目,请使用 Cell.GetRVData.GetItem

    通常此方法用于获取 表格标签序列脚注尾注对注释的引用 的项目对象。

    此方法与 GetItemNo 相反。

    TCustomRichView.GetItemNo

    通过项目的对象回文档中项目的索引。

    function GetItemNo(Item: TCustomRVItemInfo): Integer;
    

    参数

    Item 是表示项目的对象。

    返回值 项目的索引(从零开始)。

    通常此方法用于获取表项的索引。

    此方法与 GetItem 相反。

    TCustomRichView.GetItemStyle

    通过索引 ItemNo 返回项的类型(样式)。

    function GetItemStyle(ItemNo: Integer): Integer;
    

    参数

    ItemNo 项目的索引(从 0 到 ItemCount-1)。

    返回值 如果项目是文本项目,则此函数返回零或正值(样式集合中该项目的文本样式索引Style.TextStyles)。如果该项不是文本项,则此函数返回负值(该项的类型,请参阅 rvs 常量)。

    子文档的项目(表格单元格)不包含在主文档的项目范围内; 对于单元格中的项目,请使用 Cell.GetRVData.GetItemStyle

    TCustomRichViewEdit.GetCurrentItem

    获取表示插入符号位置项目的对象。

    function GetCurrentItem: TCustomRVItemInfo;
    

    返回值 插入符号位置项目的对象。

    当调用空编辑器时(即 ItemCount=0),该方法返回 nil

    如果插入符号位于表格的左侧或右侧,或者选择了多个表格单元格,则返回表格对象。 如果插入符号在表格单元格内,则此方法返回包含在此单元格中的项目。 要在这种情况下获取表,请使用 TCustomRichViewEdit.GetCurrentItemEx

    这种方法通常用于处理表格标签序列脚注尾注注释的引用

    只有在格式化文档时才必须调用此方法。

    TCustomRichViewEdit.GetCurrentItemEx

    获取给定类的项目的插入符号位置的对象。

    function GetCurrentItemEx(RequiredClass: TCustomRVItemInfoClass;
      out ItemRichViewEdit: TCustomRichViewEdit;
      out Item: TCustomRVItemInfo): Boolean;
    

    参数

    RequiredClass 所需的项目类(例如TRVTableItemInfo)。

    ItemRichViewEdit 包含此项的编辑器; 它可以是根编辑器,也可以是单元格就地编辑器(如果此项目在另一个表格的单元格中)。

    Item 插入符号位置项目的对象。

    返回值 获取到给定类的编辑器ItemRichViewEdit 和项目的对象Item,该方法将返回 True

    如果是表格,则在以下情况下返回 True

    • 插入符号在表格的右侧或左侧

    • 该表有多个单元格被选择

    • 插入符号位于表格单元格内

    在嵌套表的情况下,此方法返回顶级表(Z 顺序中最接近用户的表)。

    这种方法通常在处理表格时使用。

    只有在格式化文档时才必须调用此方法。

    TCustomRichViewEdit.BeginItemModify

    存储修改项目后快速重新格式化所需的一些信息。

    procedure BeginItemModify(ItemNo: Integer; out ModifyData: Integer);
    

    参数

    ItemNo 将被修改的项目的索引。

    ModifyData 接收一些格式化信息。 执行修改后,分配给此参数的值应传递给EndItemModify

    通常在修改表格时使用这个函数。

    只有在格式化文档时才必须调用此方法。

    TCustomRichViewEdit.EndItemModify

    修改项目后快速重新格式化编辑器。

    procedure EndItemModify(ItemNo: Integer; ModifyData: Integer);
    

    参数

    ItemNo 被修改的项目的索引。

    ModifyDataBeginItemModify中获得的值

    通常在修改表格时使用这个函数。

    只有在格式化文档时才必须调用此方法。

    TRVTableItemInfo.Changed

    通知表有关其内容的更新。

    procedure Changed;
    

    在对已插入文档的表执行操作后,您应该重新格式化该文档。

    它通常由BeginItemModify/EndItemModify(如果表格被插入到TRichViewEdit)或Format(如果表格被插入到TRichView)来完成。

    在某些情况下,即使格式化后表格也不会更新。 发生这种情况是因为表不“知道”其中的更改,因此它重用了以前的格式。

    表上的大多数操作(包括 TRVTableItemInfo 的所有方法,以及单元格就地编辑器中的编辑操作)“通知”表其内容的变化,从而允许后续重新格式化。 但是对单元格执行的 查看器样式 操作不会“通知”表格,并且重新格式化后无法显示其结果。 可以通过此方法通知表格其内容的变化。

    示例

    table := TRVTableItemInfo(MyRichView.GetItem(ItemNo));
    table.Cells[0,0].Clear;
    table.Cells[0,0].AddNL('One more line',0,0);
    table.Changed;
    MyRichView.Format;
    

    注意:version 1.7 开始,不需要在 Format 之前调用 table.Changed。 但是在使用 BeginItemModify/EndItemModify 时它仍然很有用。

  • 相关阅读:
    scrapy(二)内容获取
    scrapy(一)建立一个scrapy项目
    scrapy(四)使用redis
    scrapy(三)使用mongoDB
    索引处的解码字符串
    Golang竞争状态
    Golang之泛型编程-细节
    区块链学这个就够了-DLT(一)
    Linux日志分析-Ubuntu(一)
    经典博弈-int
  • 原文地址:https://www.cnblogs.com/txgh/p/15641170.html
Copyright © 2011-2022 走看看