Фоновая проверка орфографии в ТРВ-Редакторе (TRichView)

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

Фоновая проверка орфографии в ТРВ-Редакторе (TRichView)

Фоновая проверка орфографии помечает ошибочные (не найденные в словарях) слова:

[VCL и Lazarus] волнистыми линиями цвета TRVStyle.LiveSpellingColor

[FMX] пунктирными линиями цвета TRVStyle.LiveSpellingColor.

Фоновая проверка орфографии происходит в потоке (thread).

Запуск и завершение проверки

В TRichView:

Проверка запускается методом StartLiveSpelling.

В TRichViewEdit:

Проверка запускается:

методом StartLiveSpelling, или

когда пользователь редактирует документ, или вызывается метод редактирования документа (если LiveSpellingMode=rvlspOnChange)

Проверка останавливается методом ClearLiveSpellingResults. Clear также завершает проверку.

Компоненты для проверки орфографии

rvspellchecker Рекомендуемый компонент для проверки орфографии – TRVSpellChecker.

Кроме того, поддерживаются следующие компоненты, основанные на библиотеках других разработчиков:

1.Addict 3 и 4 от Addictive Software (платный компонент Delphi, разработка прекращена)

2.ExpressSpellChecker от Developer Express Inc. (платный компонент Delphi)

3.HunSpell (бесплатная библиотека со свободным кодом, тройная лицензия GPL/LGPL/MPL)

4.ASpell от Kevin Atkinson (бесплатная библиотека со свободным кодом, лицензия LGPL)

5.Polar SpellChecker от Polar (платный ActiveX)

Фоновый поток проверки орфографии вызывает событие OnSpellingCheck для проверки каждого слова в документе.

«Слово» определяется как последовательность символов между разделителями (Delimiters). Кроме того, символ '&' рассматривается как разделитель. Апострофы обрабатываются особым образом, см. глобальную переменную RichViewApostropheInWord.

Адреса URL пропускаются при проверке, см. функцию RVIsCustomURL.

[FMX] Сервис платформы

В FireMonkey компонент TRichViewEdit может использовать службу проверки орфографии (IFMXSpellCheckerService), предоставляемую некоторыми платформами (например, macOS).

Чтобы включить использование платформенной службы, присвойте свойству CheckSpelling = True.

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

Как делать исправления

Вызовите LiveSpellingValidateWord, если пользователь добавил слово в словарь или список пропускаемых слов.

Вызовите GetCurrentMisspelling чтобы получить или исправить выделенное слово. Например, контекстное меню можно реализовать так:

1.перед показом меню, используйте GetCurrentMisspelling, чтобы получить текущее ошибочное слово и добавить список возможных исправлений в меню;

2.когда пользователь выбрал исправление, используйте GetCurrentMisspelling снова, чтобы выделить ошибочное слово, и InsertText чтобы вставить исправление вместо него.

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

Контекстное меню

В версиях ТРВ-Редактора для VCL и Lazarus отсутствуют специальные методы для добавления пунктов исправления орфографических ошибок в выпадающее меню. Однако они реализованы в Инструментах интерфейса ТРВ (RichViewActions) в компоненте TRVAPopupMenu, а также в компонентах для интеграции ТРВ-Редактора в VCL-компоненты от Developer Express.

В FireMonkey, если свойство PopupMenu не задано, TRichViewEdit отображает специальное всплывающее меню по умолчанию. Пункты исправления орфографических ошибок добавляются в это меню автоматически. Если вы используете сторонний компонент проверки орфографии вместо платформенного сервиса, для добавления этих пунктов используется событие OnGetSpellingSuggestions. Обратите внимание, что добавляются только пункты с подсказками (пункты «Пропустить», «Пропустить все», «Добавить в словарь» не создаются автоматически).

Проверка орфографии и редактирование документа

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

Однако при вызове любого метода быстрого изменения документа, вы должны быть уверены, что фоновая проверка отключена. Если вы вызываете Clear, а затем создаёте новый документ, всё в порядке, потому что Clear отключает фоновую проверку орфографии. Но если вы вносите изменения в существующий документ, вызовите ClearLiveSpellingResults перед внесением этих изменений.

Использование памяти

Фоновая проверка требует 8 дополнительных байт на каждый элемент документа. Если она вам не нужна, вы можете скомпилировать своё приложение с директивой компилятора RVDONOTUSELIVESPELL (см. файл RV_Defs.inc)