RichView 文档 段落 项目 ITEM
一、ITEM对象
1、TCustomRVItemInfo是TRichView文档中所有项目的基本类型。
2、除TCustomRVItemInfo外,下列类型都可以构成ITEM:
3、组成ITEM对象之间的继承关系
二、ITEM是构成文档的基本要素
1、Item是文档中的基本绘图单元
2、Item分为文本Item和非文本Item
3、Item在文档中,0至ItemCount-1序列中,依据连续的ITEN的ParaSytle值(相同),组成一个段落。(Text中不得有造成换页的字符)
注意:组成段落的条件:
4、下列对象可以单独组成一个ITEM
·Text 文本
·Tabulators 制表位
·Pictures 图片
·Hot-Pictures 带超链接的图片
·Break 分页(占满整行的水平线)
·Controls Delphi/C++Builder控件
·Bullets 项目符号
·Hotspots 带超链接的项目符号
·Tables 表格
·List Markers 段落项目符号或编号
·Labels 不能换行的类似于文本的控件
·Numbered Sequences 编号序列
·Endnotes尾注
·Footnotes脚注
·Custom Item 自定义Item
5、Tag
每个Item都关联一个Tag值,旧版本中它是Integer类型的,新版本它是String类型。
Tag的功能就是方便后续的索引查找。
三、文档中的段落和ITEM
文档的结构,通常我们将文档习惯由段落组成。
在RichEdit中,段落仅是若干ITEM的组合,这个组合的特点,就是所有ITEM具有相同的ParaStyles属性(ParaNo编号),且最后一个ITEM是独立组构一行的对象,如果是Text最后一个字符(隐藏)是换行符。
1、 段落就是由文字、图像或其它可以构成一行文本的队列排列(对象)组合体。注意,它不能包含构成换行或独立占居一行的对象要素。
2、段落中的文字,不能包含:CR和LF(#13和#10)字符(回车和换行),TAB(#09)tab键字符、 #0字符(空字符)、 FF(#12)换页字符。因为这些字符,有的可以单独组建一个ITEM,构成换行(段落)。
3、当段落只有一个ITEM(字符串)。当字符串中插入其它要素,如IMAGE,该段落就由多个ITEM组成。
4、在文档中,我们不用刻意构建段落,只要一组ITEM,可以构成类似一行字符串,且只有最后一个ITEM中包含换行要素。这就自然形成一个段落。
见下图:这是6个段落的文档,但有8个ITEM:
首行标题,编号1是一个居中文本ITEM。
第二段,编号2至4由三个ITEM构成一个段。编号2和4是文本,编号3是插入一个Image。
第三段至第五段,编号5-7,都是一个ITEM,构成一个段落。
第六段,由是空串(一个换行符),组成一个ITEM。
上述文档中,有8个ITEM,有6个段落。理解段落与ITEM之间关系了吗?
注意:组成段落中ITEM的ParaStyles( 段落标题样式) 要一样。
看下图:
这个文档,由代码生成,标题的“作品中的”和“词句”是二次AddNL,虽然它们的ParaStyles和 TextStyles一样的,但是分别AddNL,二者各占用一个ITEM。标题的ItemCount=5。
但是,将该文档保存文件中,再读入时,“作品中的"和“词句”,就合并一个ITEM了,显示ItemCount=4。
注意:同一个段落中的文字,由于字体、尺寸、字体颜色不同,分别为各自的ITEM。
上图中,第一段落,有5个ITEN,分别是:§1-1、 行政、查房、制度、5(上标)。
还有一种情况,要注意:我们在使用AddNL方法时,例如:
SRichViewEdit1.RichViewEdit.AddNL('第一句',0,0);
SRichViewEdit1.RichViewEdit.AddNL('第二句',0,-1); // -1 表示与前段落合并
SRichViewEdit1.RichViewEdit.AddNL('第三句',0,-1); // -1 表示与前段落合并
上述三个字符串,文档生成后,三个字符串都在一个段落里,但三者独立建立一个ITEM。只有保存文档数据后,再次读入后中,这三个ITEM,合并一个ITEM。这一点,编程时要注意。
2、访问文档中的ITEM
property ItemCount: Integer;
ItemCount是文档中的ITEN总数,实际操作:
for i := SRichViewEdit1.RichViewEdit.ItemCount - 1 downto 0 do
begin
Item := SRichViewEdit1.RichViewEdit.GetItem(i);
if (Item is TRVTextItemInfo) then
begin
S:=Item.ItemText; // 文本
end;
end;
通过循环可以访问全体ITEM。
四、加入ITEM主要方法
AddNL 添加一个文本项;
AddBreak 添加了断线(水平线);
AddBullet 添加bullet(图片来自ImageList);
AddHotspot 添加热点(图片来自ImageList -超文本链接);
AddPicture 添加图片;
AddHotPicture 增加图片-超文本链接;
AddControl 添加Delphi/ c++ Builder控件;
AddTab 添加制表机;
AddItem 用于追加条目的通用方法(通常用于表);
AddCheckpoint 添加与下一个添加的物品相关联的检查点。
五、修改ITEM
1、获取文本
procedure SetItemTextEd(ItemNo: Integer; const s: String);
procedure SetItemTextEdA(ItemNo: Integer; const s: TRVAnsiString);
procedure SetItemTextEdW(ItemNo: Integer; const s: TRVUnicodeString);
2、设置文本
procedure SetItemTextEd(ItemNo: Integer; const s: String);
procedure SetItemTextEdA(ItemNo: Integer; const s: TRVAnsiString);
procedure SetItemTextEdW(ItemNo: Integer; const s: TRVUnicodeString);
参数:
ItemNo Item的序号
S 文本字符
六、删除ITEM
procedure DeleteItems(FirstItemNo, Count: Integer);
参数:
FirstItemNo 从0到ItemCount-1,删除的第一个ITEM。
Count 删除TEM的数量。
七、插入ITEM
procedure SetItemTextEd(ItemNo: Integer; const s: String);
procedure SetItemTextEdA(ItemNo: Integer; const s: TRVAnsiString);
procedure SetItemTextEdW(ItemNo: Integer; const s: TRVUnicodeString);
八、其它应用
后续。