Поделиться через


Включение исправления текста для пользовательских сборщиков рукописного ввода

Панель ввода планшетного пк (Майкрософт) — это мощный инструмент для ввода рукописного текста пером и исправления текста без использования клавиатуры. При использовании панели ввода пользователь вводит текст путем рукописного ввода на поверхности рукописного ввода панели ввода, что приводит к тому, что панель ввода распознает рукописный ввод пользователя как текст. После распознавания текста пользователь нажимает кнопку Вставка на панели ввода, чтобы вставить текст в приложение или документ. Перед вставкой текста пользователь имеет доступ к набору средств коррекции на панели ввода. К ним относятся выбор альтернативного результата распознавания, возможность переписать один символ или даже вычеркивать все слово и переписать. Эти средства коррекции позволяют пользователю исправлять как ошибки распознавания, так и ошибки человека.

Когда текст, введенный с помощью панели ввода, появится в документе, пользователи получают доступ к тем же функциям исправления, которые были доступны до вставки в приложениях на основе Платформы и Текстовых служб Windows. Начиная с выпуска Microsoft Windows XP с пакетом обновления 2 (SP2) для планшетов, все приложения rich edit включены по умолчанию для текстовых служб, а начиная с Windows Vista, html-приложения по умолчанию включены в текстовые службы. Исправление в документе доступно только в приложениях на основе и включенных службах текста; Это связано с тем, что панель ввода зависит от возможности службы текста хранить связанные свойства текста, включая рукописные объекты и варианты распознавания, для обеспечения исправления в документе.

панель ввода планшетного пк с исправлением текста

Однако существует множество сценариев, в том числе исправление распознавания речи или исправление введенного текста на ходу, которые не начинаются с ввода текста с помощью панели ввода, но в которых исправление в документе может быть чрезвычайно полезно для пользователей планшетных компьютеров. Ярким примером являются приложения, которые предоставляют настраиваемые поверхности рукописного ввода для ввода текста с помощью пера. Настраиваемые поверхности рукописного ввода — это отличный способ для приложений обеспечить уникальные функциональные возможности, относящиеся к задачам ввода текста в каждом приложении. Кроме того, пользовательские поверхности рукописного ввода обеспечивают полностью интегрированный пользовательский интерфейс планшетного пк, что дает понять, что перо является устройством ввода первого класса в приложениях, которые их содержат. Однако приложения, предоставляющие настраиваемые поверхности рукописного ввода, могут не разрешать или не поддерживать тот же уровень поддержки исправления, который доступен на панели ввода в документе.

пользовательский сборщик рукописного ввода

Текстовые службы, основанные или включенные приложения, в которых исправление в документе полезно для исправления текста, не введенного с помощью панели ввода, могут использовать API IHandWrittenTextInsertion панели ввода (класс Microsoft.TextInput.HandwrittenTextInsertion в управляемом коде), чтобы включить исправление текста, введенного другими способами. Таким образом, приложения могут дешево добавить мощную поддержку коррекции для пользовательских поверхностей рукописного ввода или других сценариев ввода текста, а также дополнить историю ввода текста планшетного компьютера. API IHandWrittenTextInsertion панели ввода входит в состав операционной системы Windows Vista и пакета SDK для платформы планшетов версии 1.9 или более поздней. Включены версии API на основе .NET и COM. Включение исправления в документе для текста, не введенного с помощью панели ввода, поддерживается в Windows Vista и более новых версиях. Исправление в документе доступно только для латинских языков и не может отображать символы за пределами латинской кодировки.

Использование API HandwrittenTextInsertion в приложении

Необходимые изменения в приложении для интеграции исправления в документе панели ввода для текста, не введенного с помощью панели ввода и API IHandWrittenTextInsertion , являются простыми. Весь код пользовательского текста приложения остается неизменным, за исключением последнего шага. В момент, когда текст, введенный с помощью настраиваемой поверхности рукописного ввода, распознавания речи или других средств, должен отображаться в текстовом поле с поддержкой текстовых служб, приложение отправляет текст в интерфейс IHandWrittenTextInsertion , а не непосредственно в текстовое поле. Затем компонент программирования панели ввода обрабатывает вставку текста как в текстовое поле, так и в резервное хранилище служб текста. При добавлении текста в хранилище резервных копий служб текста компонент "Панель ввода" обрабатывает настройку свойств текста, необходимых панели ввода для включения исправления в документе для этого текста.

В следующем разделе подробно рассматривается этот процесс для приложения C++, использующего COM-версию API IHandWrittenTextInsertion . Существуют примечания, в которых действия по использованию платформа .NET Framework версии API в C# отличаются для использования версии COM в C++. Управляемый API HandwrittenTextInsertion включает в себя один COM-интерфейс IHandwrittenTextInsertion. Определение для этого интерфейса находится в penInputPanel.h и PenInputPanel_i.c.

Сначала приложение должно использовать функцию CoCreateInstance для создания экземпляра IHandWrittenTextInsertion с идентификатором класса CLSID_HandwrittenTextInsertion. Обратите внимание, что создание объекта CLSID_HandwrittenTextInsertion будет успешным только после создания окна и получения фокуса, так как до этого не будет активировано резервное хранилище служб текста. Кроме того, если tiptsf.dll отсутствует в системе, функция CoCreateInstance завершается сбоем и возвращает REGDB_E_CLASSNOTREG, указывая, что исправление в документе панели ввода не поддерживается в системе. На этом этапе приложение должно продолжать работу, не пытаясь включить исправление в документе панели ввода. Экземпляр HandwrittenTextInsertion должен быть доступен из кода приложения, обрабатывающего вставку текста в текстовое поле.

Примечание

При работе с платформа .NET Framework версии API приложение должно добавить инструкцию using, чтобы разрешить доступ к пространству имен Microsoft.Ink.TextInput, а затем создать объект напрямую.

 

Во-вторых, код приложения, отвечающий за вставку текста в текстовое поле, должен быть изменен таким образом, чтобы оно больше не вставляло текст в текстовое поле напрямую, а вызывает один или другой из двух методов вставки IHandwrittenTextInsertion. Следует ли приложению вызывать InsertRecognitionResultsArray или InsertRecognitionResults , зависит от того, имеет ли приложение альтернативные варианты распознавания текста, хранящегося в виде массива или объекта IInkRecognitionResult .

Примечание

При работе в управляемом коде соответствующий объект распознавания, используемый InsertRecognitionResultsArray, — RecognitionResult. Оба метода используют следующие три параметра:

 

  • Заместители Двумерная коллекция строк, хранящейся либо в виде массива массивов, либо в виде объекта IInkRecognitionResult (или RecognitionResult). Если альтернативные варианты хранятся в виде массива массивов, они должны быть переданы в качестве указателя безопасного массива. Каждая запись в массиве верхнего уровня представляет собой список вариантов для одного слова во вставке. Запись в нулевой позиции в вложенных массивах вариантов — это текст, вставляемый в текстовое поле. Дополнительные варианты (индексы от 1 до n в каждом под-массиве) хранятся в хранилище резервных копий служб текста и предлагаются пользователю в качестве вариантов в рамках исправления в документе. Если альтернативные варианты не включены, пользователь видит вместо списка вариантов "Нет предложения". Если вставка содержит несколько слов с пробелами между ними, то каждое пространство должно быть включено как запись в массив верхнего уровня.
  • Язык Код языка ввода, соответствующий тексту, содержавшемся в параметре alternates . В случае, когда содержимое альтернативных вариантов было создано распознавателем рукописного ввода или речи, это также свойство Languages , связанное с используемым распознавателем.
  • fLatticeContainsAutoSpacingInformation Флаг, указывающий, был ли текст, содержащийся в параметре alternates , создан распознавателем с включенным автоматическим интервалом. Если был включен автоматический интервал, флаг должен иметь значение TRUE. Если автоматическое интервалы были отключены, флаг должен иметь значение FALSE. В случае, когда содержимое альтернативных вариантов было создано распознавателем, который не поддерживает автоматическое интервалы, или вообще не было создано распознавателем, флаг должен иметь значение FALSE.

Модель программирования панели ввода может вставлять текст в документ или приложение с позиции системного курсора.

Оба метода возвращают S_OK , если вставка выполнена успешно. Они возвращают E_NOINTERFACE , если приложение не основано на текстовых службах или не включено, и E_INVALIDARG , если альтернативные варианты неправильно отформатированы или недоступны. Они также могут возвращать E_OUTOFMEMORY , если в системе недостаточно памяти, или E_FAIL после катастрофического сбоя, например, если платформа текстовых служб не включена.

Заключение

Включение исправления на панели ввода в документе для текста, не введенного с помощью панели ввода, является дешевым и простым способом для приложения на основе служб текста или приложения с поддержкой, чтобы дополнить пользовательский метод рукописного ввода или метод ввода мощными функциями исправления на основе пера. В Windows Vista все приложения Rich Edit и Trident включены в текстовые службы. Хотя интегрированные поверхности рукописного ввода — отличный вариант для добавления пользовательского интерфейса планшетного компьютера в приложение, они поддерживают только половину текста, если они не включают возможности исправления. Исправление в документе предоставляет пользователям вторую половину истории, добавляя возможность замены выбора на альтернативный вариант распознавания, а также для перезаписи части или всего фрагмента.

Программирование панели ввода текста