Пример: разделение таблицы

<< Нажмите, чтобы показать Содержание >>

Пример: разделение таблицы

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(00, 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;

Параметры:

rve редактор, непосредственно содержащий таблицу table;

table таблица, которую нужно разделить на две.

Значения для передачи в эти два параметра можно получить методом RichViewEdit1.GetCurrentItemEx.

Первая получившаяся таблица будет иметь число строк = RowCountInFirstTable, вторая будет иметь число строк = table.RowCount-RowCountInFirstTable.

Если параметр PageBreak = True, между таблицами будет добавлен разрыв страницы.

Возвращаемое значение: True если таблица была разделена.

Это операция редактирования, она может быть отменена пользователем.

Примечание: подобная операция реализована в Инструментах интерфейса ТРВ (RichViewActions), в команде интерфейса TrvActionTableSplit.