OberonCore
https://forum.oberoncore.ru/

Дополнительная обработка клавиатурного ввода
https://forum.oberoncore.ru/viewtopic.php?f=35&t=5034
Страница 1 из 1

Автор:  adva [ Среда, 19 Март, 2014 08:58 ]
Заголовок сообщения:  Дополнительная обработка клавиатурного ввода

Можно ли обработать в типовой текстовой вьюхе обработку ввода определенного символа/набора символов (не горячии клавиши)?

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

Подскажите, пожалуйста, чего посмотреть по этому поводу.

Автор:  Иван Кузьмицкий [ Среда, 19 Март, 2014 10:53 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

Тут надо представлять, как клавиатурные нажатия передаются в текстовое отображение.

Когда вы нажимаете кнопку на клавиатуре, ОС порождает событие и посылает его в окно, в котором у вас текст. Каркас обрабатывает это событие и формирует сообщение для шины. Далее это сообщение падает вниз, по дереву фреймов, прямо до отображения в фокусе - которым является ваш текст. Контроллер текста обрабатывает сообщение и текст получает необходимые изменения.

Исходя из этой логики, у вас есть два способа изменить поведение текста.

1) Заменить контроллер своим.
2) Обернуть текстовое отображение собственным, чтобы перехватывать сообщение и обрабатывать его как нужно.

Проще сделать обёртку текста, см. пример ObxWrappers, там как раз есть демонстрация обработки сообщения.

Автор:  adva [ Среда, 19 Март, 2014 16:39 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

Я правильно понимаю про обертку, что если мне нужна остальная функциональностью типовой вьюхи, то я должен реализовать такой же интерфейс, с перенаправлением на неё ?

Автор:  Иван Кузьмицкий [ Среда, 19 Март, 2014 20:19 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

Если задача простая, то можно обернуть обычной Views.View и просто перенаправлять все входящие сообщения в обёрнутую TextViews.View.

А можно сделать собственную реализацию TextViews.View (тогда у неё интерфейс будет полностью соответствовать ожиданиям каркаса) и в методах реализации дёргать за методы обёрнутой TextViews.View.

Автор:  adva [ Четверг, 20 Март, 2014 08:54 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

Оказывается Петр уже реализовал, почти то, что требовалось, и как это я пропустил такую вещь viewtopic.php?f=47&t=4452&start=20

Буду над ней думать, как расширить

Но всё равно спасибо за подробные ответы.

Автор:  Иван Кузьмицкий [ Четверг, 20 Март, 2014 09:33 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

Ну, мы догадывались, что вам нужно :)

Автор:  Иван Денисов [ Четверг, 20 Март, 2014 10:15 ]
Заголовок сообщения:  Re: Дополнительная обработка клавиатурного ввода

adva писал(а):
Оказывается Петр уже реализовал, почти то, что требовалось, и как это я пропустил такую вещь viewtopic.php?f=47&t=4452&start=20

Буду над ней думать, как расширить

Но всё равно спасибо за подробные ответы.

Если понадобится еще пример работы с обертками, то поглядите еще вот этот модуль для выделения парных скобок. Все реализовано в одном модуле. Wrap надевает на текущее отображение обертку, Unwrap снимает. Обертка может обрабатывать любые события, но, как показывает опыт, на больших текстах начинает тормозит прокрутка.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/