В RealStudio, как я могу перехватить вставку форматированного текста?

Я пытаюсь создать простое текстовое поле для редактирования WYSIWYG. Однако я хочу разрешить только определенные типы форматирования (например, полужирный, курсив, подчеркивание и один тип заголовка, но не использовать цвета или другие шрифты).

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

В лучшем случае я хочу автоматически удалить любое форматирование, которое я не поддерживаю. В худшем случае я хочу просто вставить что-нибудь как простой текст, заставляя их переформатировать его. Но ни в коем случае я не хочу просто выгрузить буфер обмена в текстовую область.

Есть мысли о том, как это сделать?

2 ответа

Решение

Я бы порекомендовал создать новый класс текстового поля / текстовой области и создать обработчик меню EditPaste, который (а) делает то, что вы ищете в плане обработки текста буфера обмена, и (б) возвращает true, чтобы предотвратить вставку по умолчанию. Это безопаснее, чем использование событий Key down, поскольку пользователь может вручную выбрать вставку из меню редактирования.

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

Чтобы создать подкласс текстового поля и перехватить команду меню вставки:

  1. Открыв свой проект, перейдите в меню "Проект"> "Добавить"> "Класс"
  2. Выберите новый класс на вкладке проекта и на панели свойств установите супер в TextField
  3. Дважды щелкните по классу, чтобы редактировать его
  4. Нажмите среднюю кнопку панели инструментов "Добавить обработчик меню" в своем классе
  5. Измените имя пункта меню на "EditPaste". Поместите свой код перед "верните истину" и обязательно оставьте здесь "истину возврата".

Ваш код может затем отформатировать и вставить текст вручную и переопределить функцию вставки по умолчанию.

Любая команда-V или control-V в этом текстовом поле вызовет запуск этого обработчика меню. Любые контекстные меню будут добавлены вами в любом случае, так как real basic не создает контекстные меню по умолчанию, так что вы также можете их контролировать.

Чтобы добавить текстовое поле в окно, просто измените фильтр над списком объектов на "Элементы управления проектом" и перетащите класс оттуда.

Вы можете перехватить вставку самостоятельно, перехватывая ее в событиях KeyDown. Затем вы можете посмотреть, чтобы разобрать это самостоятельно. Это может быть немного сложно, но я думаю, что это единственный способ сделать это.

Может быть проще разобрать получившийся StyleRun после вставки и удалить ненужное форматирование.

Кроме того, вы можете посмотреть на элемент управления форматированным текстом из программного обеспечения True North и переопределить методы вставки элемента управления (вы получите весь исходный код) и просто обработать его самостоятельно.

В любом случае, я думаю, что это будет изрядная работа.

Другие вопросы по тегам