|
<< Нажмите, чтобы показать Содержание >> Операции над таблицами |
Вставка строк и столбцов относительно выделенных:
Удаление выделенных строк и столбцов:
Объединение и разъединение выделенных ячеек:
▪MergeSelectedCells (см. также CanMergeSelectedCells),
▪SplitSelectedCellsHorizontally,
Вставка строк и столбцов :
Удаление строк и столбцов :
Объединение и разъединение ячеек:
▪MergeCells (also CanMergeCells)
▪DeleteEmptyRows, DeleteEmptyCols (используйте после объединения ячеек).
Перемещение строк и столбцов:
▪MoveRows,
▪MoveCols.
Методы присвоения значений свойствам таблицы:
Методы присвоения значений свойствам строк:
▪SetRowVAlign, SetRowKeepTogether, SetRowPageBreakBefore.
Методы присвоения значений свойствам ячеек:
▪SetCellColor, SetCellBorderColor, SetCellBorderLightColor;
▪SetCellBestWidth, SetCellBestHeight;
▪SetCellBackgroundImage, SetCellBackgroundImageFileName, SetCellBackgroundProperty;
Если описанные выше операции выполняются до вставки таблицы, никаких дополнительных действий не требуется.
Если эти операции выполняются над таблицей, вставленной в 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;