Есть у меня один проект — чат. Среди всего прочего нужно проверять правописание в многострочном окне. На текущий момент после ввода каждого символа проверяются все слова в окне. Пользователи программы говорят, что их раздражает когда недопечатанное слово подчеркивается.
Отсюда вопросы: Кто знает как реализована логика проверки текста? Как определить что слово написано полностью? Причем может быть ситуация когда пользователь напечатает одно слово и отправит текст, не поставив таже точки в конце слова. Текст в окно может попасть из clipboard.
Здравствуйте, cvetkov, Вы писали:
C>первая проблема решается путем исключения слова в котором находится курсор из проверки.
C>вторая решается отменой первого правил если слово одно C>можно еще ввести задержку и проверять через пол секунды после последнего введенного символа
C>по науке конечно нужно помнить редактируемое слово, чтобы перевод курсора в неправильное слово не снимал подсветку.
А если пользователь перевел курсор в неправильное слово и напечатал один символ?
Здравствуйте, Осенний дождь, Вы писали:
ОД>Доброе время суток,
ОД>Есть у меня один проект — чат. Среди всего прочего нужно проверять правописание в многострочном окне. На текущий момент после ввода каждого символа проверяются все слова в окне. Пользователи программы говорят, что их раздражает когда недопечатанное слово подчеркивается.
ОД>Отсюда вопросы: Кто знает как реализована логика проверки текста? Как определить что слово написано полностью? Причем может быть ситуация когда пользователь напечатает одно слово и отправит текст, не поставив таже точки в конце слова. Текст в окно может попасть из clipboard.
Можно так: для всех введенных слов (тех, которые разделены пробелом и другими знаками) делать проверку на то, есть ли такое слово в словаре, а для того, которое вводится, проверять, есть ли в словаре слова, начинающиеся на то, что уже введено. В большинстве случаев такая проверка покажет, если есть ошибка, за исключением редких случаев, когда ошибка приводит к другому написанию -- возможному началу какого-то другого слова. Причем перед напечатанием последнего символа и отправкой, скорее всего, если ошибка уже была допущена, то она проявится.
C>>по науке конечно нужно помнить редактируемое слово, чтобы перевод курсора в неправильное слово не снимал подсветку. ОД>А если пользователь перевел курсор в неправильное слово и напечатал один символ?
значит он начал редактировать это слово и его проверять не надо. пока его редактирование не закончится. ворд, например, считает что редактирование закончилось если курсор покинул пределы слова (и еще какието события я не уверен)
Здравствуйте, cvetkov, Вы писали:
C>>>по науке конечно нужно помнить редактируемое слово, чтобы перевод курсора в неправильное слово не снимал подсветку. ОД>>А если пользователь перевел курсор в неправильное слово и напечатал один символ? C>значит он начал редактировать это слово и его проверять не надо. пока его редактирование не закончится. ворд, например, считает что редактирование закончилось если курсор покинул пределы слова (и еще какието события я не уверен)
Вообщем я для себя определил следующий алгоритм.
1) После ввода любого символа проверять все слова, кроме того где находиться курсор
2) Если с момента последнего ввода символа прошло время T, то проверяем слово в котором находиться курсор
3) При перемещении курсора в неверно написанное слово подчеркивание снимать не нужно до тех пор пока не будет введен хотя бы один символ (либо стерт)