TRichViewEdit: Отмена и возврат операций

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

TRichViewEdit: Отмена и возврат операций

Действие всех методов редактирования документа, объявленных в редакторе (TRichViewEdit), можно отменить/вернуть (см. методы редактирования документа).

Действие всех методов изменения документа, объявленных в TRichView, нельзя отменить/вернуть (см. методы быстрого изменения документа). Если вы хотите изменить документ с помощью этих методов, необходимо предварительно очистить буфер отмены.

Все методы и свойства, описанные в этом разделе, являются методами и свойствами TRichViewEdit.

property UndoLimit: Integer

Свойство UndoLimit задает ёмкость буфера отмены. Его можно использовать для отключения функции отмены/возврата.

Простые возврат и отмена

Функция отмены/возврата действий доступна в редакторе даже без каких-либо усилий с вашей стороны.

Пользователь может отменить последнюю операцию, нажав  Ctrl + Z  или  Alt + Backspace .

Пользователь может вернуть последнюю отменённую операцию, нажав  Shift + Ctrl + Z  или  Shift + Alt + Backspace .

В macOS вместо  Ctrl  используется  ⌘ .

Буферы отмены/возврата будут автоматически очищены при вызове метода Clear или при использовании методов для загрузки документов (которые вызывают Clear внутри).

Вы можете очистить буферы отмены/возврата и самостоятельно, используя метод ClearUndo.

Реализация меню/панели инструментов для отмены/возврата действий

Вы можете отменять/возвращать операции из кода приложения, используя методы Undo и Redo.

Вы можете изменить состояние доступности (свойство Enabled) пунктов меню или кнопок, сравнивая возвращаемые значения функций UndoAction и RedoAction со значением rvutNone (rvutNone – меню для отмены/возврата должно быть отключено; другие значения – включено).

Вызывайте эти методы внутри события OnChange.

Вы можете изменить заголовок/подсказку пункта меню или кнопки, чтобы отобразить имя действия, которое будет отменено/повторено следующим. Значение, идентифицирующее это действие отмены/повтора, можно получить с помощью UndoAction/RedoAction.

Для стандартных действий отмены/повтора нет предопределённых имён. В демонстрационном примере редактора (Demos\*\Editors\Editor 1\) предлагаемые имена действий находятся в файле RVUndoStr.pas.

Константа rvutCustom является особым случаем, см. ниже. Для этого значения используйте методы UndoName/RedoName.

Объединение операций для отмены

Вы можете установить режим отмены таким образом, чтобы все последующие операции рассматривались редактором как единое целое и отменялись (и возвращались) за один шаг.

Сначала вам нужно присвоить название этому действию. Название может быть стандартным (это не совсем название, а скорее тип действия отмены) или пользовательским.

Используйте BeginUndoGroup для присвоения стандартного названия или BeginUndoCustomGroup для присвоения своего названия.

Далее вам нужно вызвать SetUndoGroupMode.

procedure TRichViewEdit.BeginUndoGroup(UndoType: TRVUndoType);

начинает новую отменяемую операцию. После его вызова нужно вызвать SetUndoGroupMode(True) ... SetUndoGroupMode(False).

UndoType может быть любым значением типа TRVUndoType, кроме rvutNone и rvutCustom.
Это значение будет возвращено UndoAction/RedoAction.

procedure TRichViewEdit.BeginUndoCustomGroup(const Name: TRVUnicodeString);

то же что BeginUndoGroup, но позволяет назначить своё название отменяемой операции. Тип операции будет равен rvutCustom.

Это название будет возвращено UndoName/RedoName.

procedure TRichViewEdit.SetUndoGroupMode(GroupUndo: Boolean);

устанавливает/отменяет режим, в котором все последующие операции будут отменены за один шаг. Его вызову должен предшествовать вызов BeginUndoGroup или BeginUndoCustomGroup. Ввод текста с клавиатуры не может быть объединён. Операции в различных редакторах ячеек таблицы не могут быть объединены.

Эти методы должны быть вызваны для редактора, непосредственно в котором эти операции совершаются (обычно это TopLevelEditor)

hmtoggle_arrow1Пример (вставка рисунка и установка его размера в 100x100 пикселей):

Примечание: этот код приведён как пример объединения операций. В новых версиях ТРВ-Редактора размер изображения может быть указан в параметрах InsertPicture.

За каждым вызовом SetUndoGroupMode(True) должен следовать ровно один вызов SetUndoGroupMode(False).

Вызовы могут быть вложенными.

Объединение операций для отмены, альтернативный способ

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

Используйте BeginUndoGroup2..EndUndoGroup2, чтобы присвоить группе операций стандартное название, или BeginUndoCustomGroup2..EndUndoCustomGroup2, чтобы присвоить группе своё название. В отличие от методов, описанных в предыдущем разделе, эти методы следует вызывать для корневого редактора, а не для редакторов ячеек.

hmtoggle_arrow1Пример (замена всех вхождений FindText на ReplaceText):

См. также...

Методы, объявленные в TRichView и отмена операций: см. Компоненты просмотра и компоненты редактирования.