Новое событие ПриВыбореСловаТ9

tormozit Открыто Высокий

Уже накопилось несколько пользовательских задач, где требуется особым образом управлять вставкой выбранного из списка Т9 слова. Например

Поэтому предлагаю добавить событие ПриВыбореСловаТ9(ВыбранноеСлово, ПараметрыВставки). Структура ПараметрыВставки будет содежать для начала

  • ЗаменяемыйДиапазон(НачальнаяПозиция, КонечнаяПозиция)
  • ЗаменяющийТекст(Строка)
  • ПозицияКаретки - позиция каретки в замещающем тексте

Оно позволит в скрипте решать все подобные задачи

Комментарии

tormozit
#1, ред. 25 мая 2024 09:27

Также это событие позволит мне вести статистику выбора слов. При вызове подсказки из окна ИР она ведется и используется при установке активной (рейтинга) строки списка при его открытии.
Но при вызове из Турбоконфа сейчас я не могу узнать, какое слово выбрал пользователь и потому собирать эту статистику.
tormozit изменил статус на Открыто


tormozit
#2, ред. 26 мая 2024 10:43

Также это событие позволит мне удобнее устанавливать каретку - например при вставке вызова метода без параметров установить ее после закрывающей скобки. Самый частый пример - вызов метода Количество(). Сейчас каретка встает между скобками при его вставке. А вычислять количество параметров сразу у всех методов перед открытием списка - неоправданно долго.


bolsun
#3, 26 мая 2024 14:09

(2) tormozit, что бы каретка не вставала внутри скобок, нужно передавать свойство ЕстьПараметры = Ложь


bolsun
#4, ред. 26 мая 2024 14:16

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

Подсказка T9 штатно уже поддерживает управляющие символы для установки позиции <!> или установка позиции с вызовом Ctrl+Space <?>
Но для этого нужна доработка API, чтобы можно было передать свойство Шаблон


tormozit
#5, 26 мая 2024 14:25

(4) bolsun, Тогда предлагаю упростить это событие до ПриВыбореСловаТ9(ВыбранноеСлово, ШаблонВставки)
где

  • ВыбранноеСлово - Слово с символом "(" на конце для методов и без него в остальных случаях
  • ШаблонВставки - строка шаблона с уже реализованной разметкой, которую вернет обработчик. Тут я укажу позицию каретки маркером "<!>".

Получится ли с помощью разметки шаблона решить задачу захвата родительского слова https://turboconf.ru/Tasks/8988 ?


bolsun
#6, ред. 26 мая 2024 14:35

(5) tormozit,

Получится ли с помощью разметки шаблона решить задачу захвата родительского слова https://turboconf.ru/Tasks/8988 ?

Нет

Тогда предлагаю упростить это событие до ПриВыбореСловаТ9(ВыбранноеСлово, ШаблонВставки)

Зачем нужен новый обработчик (это совсем не упростит реализацию), если можно заранее передать шаблон при установке значений T9?


bolsun
#7, 26 мая 2024 18:42

  • Для значений, передаваемых методом УстановитьДанныеT9 добавлено свойства ТекстШаблона.
    https://disk.yandex.ru/d/XKCz9ijzgtoO1w

Но для помещения каретки внутрь скобок, рекомендуется использовать свойство ЕстьПараметры = Истина, т.к. через шаблон будет медленнее.


bolsun
#8, 26 мая 2024 19:41

  • Для значений, передаваемых методом УстановитьДанныеT9 добавлено свойство ЗаменятьРодителяПриВставке.

https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#9, ред. 26 мая 2024 19:56

Возникает ошибка

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 1662 / Внешнее исключение (System.MissingFieldException): Поле не найдено: "TurboConf.Shared.T9Item.ReplaceParent".}
ТурбоКонф.УстановитьДанныеT9(ПараметрыЗаполнения);

Пробовал варианты

		ЭлементСписка.Вставить("ReplaceParent", Найти(СтрокаСлова.Слово, ".") > 0);
		ЭлементСписка.Вставить("ЗаменятьРодителяПриВставке", Найти(СтрокаСлова.Слово, ".") > 0);


bolsun
#10, 26 мая 2024 20:40

TurboConf.Shared.dll

нужно заменить и перезагрузить ТК


tormozit
#11, ред. 26 мая 2024 21:02

Ошибка ушла. Теперь возникла задача - разделить отображаемое и вставляемое значения. Например, в списке есть метод "Найти" из общего модуля "Универсал". В отображении у меня сейчас "Найти - Универсал". Куда мне поместить вставляемую строку "Универсал.Найти"?

Из того что я вижу только новое свойство ТекстШаблона подходит, но ты сообщил что оно медленное.


tormozit
#12, 26 мая 2024 21:13

Сделал пока через ТекстШаблона. Задача вставки с родителем https://turboconf.ru/Tasks/8988 решена.


tormozit
#13, 26 мая 2024 21:16

Небольшое замечание. Если в ТекстШаблона установить пустую строку (я думал тогда он будет игнорироваться), то возникает ошибка

Не удалось вставить текст T9. System.ArgumentException: The input array was empty
Имя параметра: inputs
в WindowsInput.WindowsInputMessageDispatcher.DispatchInput(INPUT[] inputs)
в WindowsInput.KeyboardSimulator.TextEntry(String text)
в TurboConf.Core.TurboAPI.TurboApi.SendText(String text)
в TurboConf.Core.TurboAPI.TurboApi.DvH{l#F Al,A~GI4~oy>&t|b'.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в System.Runtime.CompilerServices.TaskAwaiter.GetResult()
в TurboConf.Service.NewT9Form.Bl_YtD|wYvJPX]'zdw{vcm^"(.MoveNext()


bolsun
#14, 26 мая 2024 21:17

(11) tormozit, ТекстШаблона - вставка не медленная, медленнее может быть перемещение каретки внутрь скобок (но это тоже нужно проверять).
у меня вообще есть свойство Значение, для вставки, но почему-то в API его не добавили, а используем Представление


bolsun
#15, ред. 26 мая 2024 21:19

(13) tormozit, нужно использовать Неопределено, вместо пустой строки либо вообще не добавлять.


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