Операции над таблицами

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

Операции над таблицами

Действия с выделением

Вставка строк и столбцов относительно выделенных:

InsertColsLeft,

InsertColsRight,

InsertRowsAbove,

InsertRowsBelow.

Удаление выделенных строк и столбцов:

DeleteSelectedCols,

DeleteSelectedRows,

Объединение и разъединение выделенных ячеек:

MergeSelectedCells (см. также CanMergeSelectedCells),

UnmergeSelectedCells,

SplitSelectedCellsHorizontally,

SplitSelectedCellsVertically

Другие действия

Вставка строк и столбцов :

InsertCols,

InsertRows.

Удаление строк и столбцов :

DeleteCols,

DeleteRows.

Объединение и разъединение ячеек:

MergeCells (also CanMergeCells)

UnmergeCells,

DeleteEmptyRows, DeleteEmptyCols (используйте после объединения ячеек).

Перемещение строк и столбцов:

MoveRows,

MoveCols.

Присвоение свойств таблицы (как операция редактирования)

Методы присвоения значений свойствам таблицы:

SetTableVisibleBorders;

SetBackgroundProperty.

Методы присвоения значений свойствам строк:

SetRowVAlign, SetRowKeepTogether, SetRowPageBreakBefore.

Методы присвоения значений свойствам ячеек:

SetCellColor, SetCellBorderColor, SetCellBorderLightColor;

SetCellVAlign;

SetCellRotation;

SetCellTag;

SetCellBestWidth, SetCellBestHeight;

SetCellBackgroundImage, SetCellBackgroundImageFileName, SetCellBackgroundProperty;

SetCellHint;

SetCellVisibleBorders;

SetCellOpacity;

SetCellOptions.

Действия в компоненте просмотра и в компоненте редактирования

Если описанные выше операции выполняются до вставки таблицы, никаких дополнительных действий не требуется.

Если эти операции выполняются над таблицей, вставленной в TRichView, необходимо вызвать метод Format, чтобы подготовить документ к показу.

Если эти операции выполняются над таблицей, вставленной в TRichViewEdit, требуется специальная последовательность действий:

1.Проверка RichViewEdit.CanChange (особенно важно для компонентов, работающих с базой данных);

2.получение объекта таблицы и его позиции в редакторе (позиция определяется как номер элемента + редактор, в который непосредственно вставляется эта таблица (может быть корневым редактором или редактором ячейки; далее обозначается как rve);

3.вызов rve.BeginItemModify для таблицы;

4.выполнение операций;

5.вызов rve.EndItemModify;

6.вызов rve.Change.

См. пример ниже.

Используя SetUndoGroupMode, операции можно объединить так, чтобы они отменялись и возвращались как одно целое.

Для выполнения операций над таблицей необходимо получить объект таблицы. Это можно сделать с помощью метода:

function TRichView.GetItem(ItemNo: Integer): TCustomRVItemInfo;

TCustomRVItemInfo является родительским классом для всех элементов документа, включая таблицу (TRVTableItemInfo). Этот метод можно использовать для элементов любого типа, поэтому необходимо проверить, является ли возвращённое значение таблицей (используя оператор is или проверяя RichView.GetItemStyle(ItemNo)=rvsTable).

Однако обычно, когда необходимо выполнить операции над элементом в позиции каретки в редакторе, неизвестно, находится ли текущий элемент в корневом редакторе, или внутри ячейки, или внутри ячейки таблицы внутри другой ячейки и так далее.

В любом случае, получить элемент в позиции каретки можно с помощью метода:

function TRichViewEdit.GetCurrentItem: TCustomRVItemInfo;

Но если каретка находится внутри таблицы, текущим элементом будет не таблица, а какой-то другой элемент в редакторе ячейки!

Эта проблема решается методом:

function TRichViewEdit.GetCurrentItemEx(

  RequiredClass: TCustomRVItemInfoClass;

  out ItemRichViewEdit: TCustomRichViewEdit;

  out Item: TCustomRVItemInfo): Boolean;

В этом методе,

RequiredClass передайте TRVTableItemInfo (для C++Builder: __classid(TRVTableItemInfo)).

Возвращаемое значение: True если имеется элемент указанного класса в позиции каретки (то есть каретка слева или справа от таблицы), или если каретка внутри элемента указанного класса (то есть каретка в ячейке таблицы).

Item получает элемент заданного класса самого глубокого уровня вложенности  (то есть таблицу).

ItemRichViewEdit получает родительский редактор элемента Item  (элемент Item содержится непосредственно в этом редакторе).

Редактор может быть корневым редактором или редактором ячейки таблицы.

Пример

// MyRichViewEdit:TRichViewEdit - это редактор,

// помещённый на форму во время создания программы.

// Примечание: большинство операций выполняются в

// rve (редакторе, полученным вызовом GetCurrentItemEx),

// а не в MyRichViewEdit.

var 

  item: TCustomRVItemInfo;

  table: TRVTableItemInfo;

  Data: Integer;

  rve: TCustomRichViewEdit;

  ItemNo: Integer;

begin

  if not MyRichViewEdit.CanChange or

     not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, 

       item) then

    exit;

  table := TRVTableItemInfo(item);

  ItemNo := rve.GetItemNo(table);

  rve.BeginItemModify(ItemNo, Data);

  // выполнение операций, например

  // table.InsertRowsBelow(1);

  // или table.CellPadding := 10

  rve.EndItemModify(ItemNo, Data);

  rve.Change;

end;