http://blog.sina.com.cn/game7788
夸父
Table(表格)
table是RICHVIEW里面一个比较特殊的元素,也是RICHVIEW众元素中最复杂的一种,TABLE由单元格组成,在RICHVIEW里,每个单元格相当于一个RICHVIEW文档,单元格里面可以表格等各种元素,理论上表格是可以无限嵌套,这样的结构就导致了其复杂性。
Table属性
BorderWidth 表的边框长度
BorderStyle 边框样式
BorderColor 边框颜色
BorderLightColor 3D外观边框颜色
VisibleBorders 边框的显示和隐藏
CellBorderWidth 单元格边框长度
CellBorderStyle 单元格边框样式
CellBorderColor 单元格边框颜色
CellBorderLightColor 3D外观单元格边框颜色
CellHSpacing 单元格之间的水平距离
CellVSpacing 单元格之间的垂直距离
BorderHSpacing 表边框与表最外层单元格之间的水平距离
BorderVSpacing表边框与表最外层单元格之间的垂直距离
Color 表的背景色
BackgroundImage 背景图
BackgroundStyle 背景样式
BackgroundImageFileName 在HTML中保存背景图名
Table方法
InsertColsLeft 当前单元格左边增加列
InsertColsRight 当前单元格右边增加列
InsertRowsAbove当前单元格上面增加行
InsertRowsBelow 当前单元格下面增加行
DeleteSelectedCols删除选中列
DeleteSelectedRows删除选中行
MergeSelectedCells 合并单元格
UnmergeSelectedCells拆分单元格
SplitSelectedCellsHorizontally 将选中的单元格拆分成几行
SplitSelectedCellsVertically 将选中的单元格拆分成几列
InsertCols 指定位置增加列
InsertRows 指定位置增加行
DeleteCols 删除指定列
DeleteRows 删除指定行
MergeCells 合并指定范围内的单元格
UnmergeCells 拆分指定范围内的单元格
DeleteEmptyRows 删除所有带有空单元各的行
DeleteEmptyCols 删除所有带有空单元各的列
TABLE用法
创建
...
var table:TRVTableItemInfo;
...
table := TRVTableItemInfo.CreateEx(RowCount,ColumnCount,RVData);
RVData是你要创建表的文档,一般是指richview.RVData或richviewedit.RVData
RICHVIEW中增加表
table.ParaNo := <Paragraph Style Index>
richview.AddItem(<Table name>, table)
Paragraph Style Index 是这个表的索引值
Table name 表的名字,一个字符串,不是指这个对象名
这个方法不用在显示文档之前重新格式化。
richviewedit中增加表
richviewedit.InsertItem(<Table name>, table)
这个方法是在当前位置加入表,不管光标在文档中,还是在表格或者单元格中(光标在哪就加到哪),如果文档是只读或者处于保护状态,用这个方法后,会返回一个FALSE,如果光标在表格中,这个方法将自动释放表格
cell用法
cell(单元格)是表格的主属性,因为每个CELL相当于一个RICHEDIT,所以用法和RICHEDIT差不多,但要注意的事,这些用法一般只是相对于光标当前所以的位置,也就是说,如果光标在表格里,同样的方法就是对表格的作用,如果在表格外,就是对外面的RICHEDIT的作用,如果一个文档里面同时有多个表格的时候,光标在任意地方,你想往某个表格中的某个单元格输入内容时,这时就要自己判断地方了。这是因为,当光标点某个地方时,RICHEDIT实际上已经帮你判断好了位置。
那么,如何在一个文档的表格里面的指定的一个单元格里面,输入自己的内容呢?
假设现在有一个文档,里面有一个表格(多个表格大家自己去想,方法一样)
,这个表格里面有二个单元格,我现在想在第二个单元格中输入‘我爱你’三个字,并且此时光标在任意地方,下面是最简单实现方法
for i:= 0 to itemcount -1 do
begin
if getitem(i) is TRVTableItemInfo then
begin
RVData:=TRVTableItemInfo(item).cells[0,1].AddNLATag('我爱你', 0, 0, '');
break;
end;
end;
如果此时的单元格你不知道多少个,可以用遍历表格单元格方法,如下,我要得到表格中,每个单元格的中的文字
for row := 0 to TRVTableItemInfo(item).RowCount-1 do
begin
for col := 0 to table.ColCount-1 do
if table.Cells[row,col]<>nil then
begin
RVData := table.Cells[row,col].GetRVData;//得到第一个单元格内容
for i := 0 to RVData.ItemCount-1 do //开始遍历格子中的元素,和RICHEDIT一样
begin
if (i>0) and RVData.IsFromNewLine(i) then
Result := Result + #13#10;
if RVData.GetItemStyle(i)=rvsTab then
Result := Result + #9
else if RVData.GetItemStyle(i)>=0 then
Result := Result + RVData.GetItemText(i);//得到第一个单元格的文字
end;
Result := Result + table.TextColSeparator;//遍历第一行的所有格子,值相加
end;
Result := Result + table.TextRowSeparator;//遍历所有行的格子,值相加,最终得到每个格子的值
end;
|