<< Click to display table of contents >> Example: dividing table |
function SplitTable(rve: TCustomRichViewEdit;
table: TRVTableItemInfo; RowCountInFirstTable: Integer;
PageBreak: Boolean): Boolean;
var r, c, mr, mc: Integer;
newtable: TRVTableItemInfo;
Stream: TMemoryStream;
begin
Result := False;
if RowCountInFirstTable>=table.RowCount then
exit;
for c := 0 to table.ColCount-1 do
if table.Cells[RowCountInFirstTable, c] = nil then
begin
table.Rows.GetMainCell(RowCountInFirstTable, c, mr, mc);
if mr<RowCountInFirstTable then
exit;
end;
Stream := TMemoryStream.Create;
table.SaveRowsToStream(Stream, RowCountInFirstTable,
table.RowCount-RowCountInFirstTable);
Stream.Position := 0;
newtable := TRVTableItemInfo.CreateEx(0, 0, rve.RVData);
newtable.LoadFromStream(Stream);
if PageBreak then
newtable.PageBreakBefore := True;
Stream.Free;
rve.BeginUndoGroup(rvutModifyItem);
rve.SetUndoGroupMode(True);
try
table.DeleteRows(RowCountInFirstTable,
table.RowCount-RowCountInFirstTable, True);
// GetMyItemNo is the same as rve.GetItemNo(table), but faster
rve.SetSelectionBounds(table.GetMyItemNo, 1, table.GetMyItemNo, 1);
rve.InsertItem('', newtable);
finally
rve.SetUndoGroupMode(False);
end;
Result := True;
end;
Parameters:
rve – editor directly containing table;
table – the table to divide.
These two parameters are usually a result of RichViewEdit1.GetCurrentItemEx.
The table will be divided into two tables.
The first resulting table will have row count = RowCountInFirstTable, the second table will have row count = table.RowCount-RowCountInFirstTable.
If PageBreak parameter is True, a page break will be inserted between tables.
Return value: True if the table was divided.
This is an editing operation, it can be undone and redone by the user.