trichview.com

trichview.support.examples




Example: dividing table into 2 tables


Return to index


Author

Message

Sergey Tkachenko

Posted: 03/13/2004 23:32:52


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.Rows.Count then

    exit;

  for c := 0 to table.Rows[0].Count-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.Rows.Count-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.Rows.Count-RowCountInFirstTable, True);

    rve.SetSelectionBounds(table.GetMyItemNo, 1, table.GetMyItemNo, 1);

    rve.InsertItem('', newtable);

  finally

    rve.SetUndoGroupMode(False);

  end;

  Result := True;

end;


Parameters:

rve - editor containing table; this is usually a result of

RichViewEdit1.GetCurrentItemEx;

table - the table to split

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.Rows.Count-RowCountInFirstTable.

If PageBreak parameter is True, a page break will be inserted between

tables.






Powered by ABC Amber Outlook Express Converter