|
<< Нажмите, чтобы показать Содержание >> Отмена и возврат операций над таблицами |
Все операции с таблицей (добавление/удаление строк, слияние/разъединение, присвоение свойств таблицы) можно отменить/вернуть, если таблица была вставлена в RichViewEdit.
Операции могут быть отменены, если:
▪таблица была создана, но ещё не вставлена;
▪таблица была вставлена в RichView;
▪таблица была вставлена в RichViewEdit, имеющий UndoLimit=0.
Пример 1
Две операции: (вставка таблицы и изменение её цвета) могут быть отменены за два шага:
table := TRVTableItemInfo.CreateEx(4,3, RichViewEdit1.RVData);
if RichViewEdit1.InsertItem('', table) then
table.Color := clRed;
Пример 2
Одна операция (вставка красной таблицы) может быть отменена за один шаг:
table := TRVTableItemInfo.CreateEx(4,3, RichViewEdit1.RVData);
table.Color := clRed; // таблица ещё не вставлен
RichViewEdit1.InsertItem('', table);
(Например, метода AddNL)
Эти методы не следует вызывать вперемешку с методами, реализующими операции редактирования (например, InsertText), поскольку они будут конфликтовать с механизмом отмены операций. Результат отмены-возврата операций непредсказуем, если после операций редактирования использовались операции быстрого изменения документа.
Это правило относится не только к содержимому основного документа, но и к ячейкам.
В некоторых случаях методы быстрого изменения документа могут быть полезны и в редакторе:
▪После вызова метода Clear, до вызова методов редактирования (для создания нового документа). Метод Clear очищает буферы отмены и возврата операций.
▪В ячейках перед вставкой новой таблицы.
▪Если UndoLimit редактора = 0 (механизм отмены операций отключён). Однако Format должен быть вызван перед тем, как вызвать любой метод редактирования документа.
▪После вызова метода ClearUndo. Однако Format должен быть вызван перед тем, как вызвать любой метод редактирования документа.
Прямое присвоение значение свойствам ячейки или строки не может быть отменено.
Однако имеются специальные методы.
table.Cells[r,c].Color := clRed; // нельзя отменить
table.SetCellColor(clRed, r,c); // можно отменить
(полный список таких методов см. ниже)
Это было реализовано таким способом исходя из соображений эффективности.
Эти методы не переформатируют редактор. Используйте их совместно с BeginItemModify/EndItemModify.
Например
var
item: TCustomRVItemInfo;
table: TRVTableItemInfo;
Data: Integer;
rve: TCustomRichViewEdit;
ItemNo: Integer;
begin
if not RichViewEdit1.CanChange or
not RichViewEdit1.GetCurrentItemEx(
TRVTableItemInfo, rve, item) then
exit;
table := TRVTableItemInfo(item);
ItemNo := rve.GetItemNo(table);
rve.BeginItemModify(ItemNo, Data);
table.SetRowVAlign(rvcBottom, 1);
table.SetCellColor(clRed,1,1);
rve.EndItemModify(ItemNo, Data);
rve.Change;
end;
Присвоение значений всем свойствам таблицы можно отменить (но по-прежнему требуется последовательность действий BeginItemModify-операции-EndItemModify-Change). Единственное исключение – свойство VisibleBorders; используйте SetTableVisibleBorders, если хотите изменить это свойство с возможностью отмены.
Прямые присвоения свойствам ячеек и строк отменить нельзя, поэтому используйте приведенные ниже методы для возможности операции отмены.
Методы присвоения свойств таблицы:
Методы присвоения свойств строки:
▪SetRowVAlign, SetRowPageBreakBefore, SetRowKeepTogether.
Методы присвоения свойств ячейки:
▪SetCellColor, SetCellBorderColor, SetCellBorderLightColor;
▪SetCellBestWidth, SetCellBestHeight;
▪SetCellBackgroundImage, SetCellBackgroundImageFileName, SetCellBackgroundProperty;