4

В Windows (и, возможно, в большинстве других ОС) есть приятная функция, которая позволяет более эффективно перемещаться и выбирать текст. При использовании Ctrl (+ Shift ]) + стрелка влево / вправо можно перемещаться или выделять фрагменты текста (разделенные пробелами, тире и другими). Моя проблема в том, что я обычно хочу, чтобы это поведение распознавало и останавливалось на более обширном списке символов (например, подчеркивание _).

Это поведение встроено в Windows? Может ли это быть переопределено в масштабе всей системы или разработчиками приложений?

1 ответ1

3

Мы можем поэкспериментировать с этой строкой (вставить ее в Блокнот или что-то в этом роде):

a!b@c#d$e%f^g&h*i(j)k-l=m_n+o{p}q[r]s|t\u`v~w/x<y>z?0.1;2'3:4"5

Я нашел это ! , $ , % , ( , - , + , { , } , [ , | , \ , и ? все они имеют некоторый эффект на разрыв строки или кластеризацию символов. Как ни странно, существует несколько типов влияния - они различаются по тому, могут ли они ломать линии и останавливается ли Control+Arrow до или после. (И упущение ] не случайно. Открывающая скобка обладает особыми свойствами, но закрывающей не так уж и много.)

Каждый элемент редактирования в Windows имеет процедуру разрыва слов. Такая процедура отвечает за:

  • Определение поведения данного персонажа в отношении переноса слов
  • Определение, является ли символ разделителем
  • Нахождение начала следующего / предыдущего слова / кластера относительно текущей позиции

Большинство приложений используют Windows по умолчанию, которая, насколько я могу судить, не настраивается. Заданную процедуру редактирования или процедуру преобразования слов в элементе управления расширенным текстом можно установить с помощью сообщения окна EM_SETWORDBREAKPROC . Обычно это делается приложением, которому принадлежит элемент управления, поскольку адрес процедуры будет гарантированно действителен только в этом процессе. Программно, вы можете создать поток внутри процесса целевого приложения, который устанавливает пользовательскую процедуру прерывания для ваших целевых элементов управления, но, похоже, нет менее хитрого способа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .