|
<< Нажмите, чтобы показать Содержание >> 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)
MyRichViewEdit.TopLevelEditor.BeginUndoGroup(rvutInsert); MyRichViewEdit.TopLevelEditor.SetUndoGroupMode(True); try if MyRichViewEdit.InsertPicture(...) then begin MyRichViewEdit.SetCurrentItemExtraIntProperty( rvepImageHeight, MyRichViewEdit.Style.StandardPixelsToUnits(100), True); MyRichViewEdit.SetCurrentItemExtraIntProperty( rvepImageWidth, MyRichViewEdit.Style.StandardPixelsToUnits(100), True); end; finally MyRichViewEdit.TopLevelEditor.SetUndoGroupMode(False); end; |
Примечание: этот код приведён как пример объединения операций. В новых версиях ТРВ-Редактора размер изображения может быть указан в параметрах InsertPicture.
За каждым вызовом SetUndoGroupMode(True) должен следовать ровно один вызов SetUndoGroupMode(False).
Вызовы могут быть вложенными.
Существует еще один способ объединения операций отмены. Он менее эффективен, но позволяет объединять операции в нескольких ячейках таблицы.
Используйте BeginUndoGroup2..EndUndoGroup2, чтобы присвоить группе операций стандартное название, или BeginUndoCustomGroup2..EndUndoCustomGroup2, чтобы присвоить группе своё название. В отличие от методов, описанных в предыдущем разделе, эти методы следует вызывать для корневого редактора, а не для редакторов ячеек.
MyRichViewEdit.MoveCaret(rvcmTop); MyRichViewEdit.BeginUndoGroup2(rvutInsert); try while MyRichViewEdit.SearchText( FindText, [rvseoDown, rvseoMultiItem]) do finally MyRichViewEdit.EndUndoGroup2(rvutInsert); end; |
Методы, объявленные в TRichView и отмена операций: см. Компоненты просмотра и компоненты редактирования.