Новое событие ПриВыбореСловаТ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, нужно использовать Неопределено, вместо пустой строки либо вообще не добавлять.


Евгений М.
#16, 02 июля 2024 14:20

(15) bolsun, хочется, чтобы ранее использованные слова стояли в списке выше остальных https://turboconf.ru/Tasks/9578


tormozit
#17, 02 июля 2024 14:23

Задачу (16) в скрипте при заполнении списка подсказки тоже невозможно решить без этого события.


tormozit
#18, ред. 07 июля 2024 23:27

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


tormozit
#19, 09 июля 2024 23:00

Еще пример задачи, которую позволит решить это событие - https://turboconf.ru/Tasks/9596


bolsun
#20, 25 ноября 2024 10:03

6.3.9095.21550
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

API

  • Добавлен обработчик ПослеВставкиЗначенияT9(Параметры, Отказ, СтандартнаяОбработка)

Параметры - содержит структуру:

Значение,
ЭтоМетод,
КлючСловаря,
Описание


bolsun
#21, 06 декабря 2024 23:28

bolsun изменил статус на Закрыто


tormozit
#22, ред. 06 декабря 2024 23:33

Хотелось бы все таки еще и возможность вставлять текст в этом событии, т.к. есть как минимум несколько полезных генераторов блоков кода, которые существенно сокращают число нажатий клавиш (например заполнение свойств объекта - каждое свойство на своей строке модуля). Генерировать такие блоки сразу все до открытия списка - расточительно. А вот при выборе конкретного слова-генератора формировать их перед вставкой будет намного эффективнее.


bolsun
#23, 07 декабря 2024 00:21

bolsun изменил статус на Открыто


tormozit
#24, ред. 07 декабря 2024 17:37

В автодополнении ИР я уже сделал один такой (22) генератор https://www.hostedredmine.com/issues/997682 . Теперь жду возможности подключить его и в Турбоконфе.


bolsun
#25, 07 декабря 2024 22:32

В твоем примере вроде вполне можно обойтись обычной вставкой шаблона.
Самому заменять и вставлять текст ненадежно и не будет использоваться перетаскивание.
Могу попробовать добавить событие ПередВставкойЗначенияT9, где можно будет сделать расчет и изменить вставляемое значение.


tormozit
#26, ред. 08 декабря 2024 00:00

(25) bolsun, Конечно можно обойтись генерацией шаблона до открытия списка Т9 и таким образом замедлить это самое открытие. В том случае не сильно.
Но вот я уже сделал и более тяжелый генератор в ИР https://www.hostedredmine.com/issues/997684

событие ПередВставкойЗначенияT9

Тогда событие ПослеВставкиЗначенияT9 выглядит избыточным


bolsun
#27, ред. 08 декабря 2024 00:01

(26) tormozit, нет, открытие подсказки будет как обычно. Событие будет вызываться непосредственно после выбора значения, но до вставки. Ну либо назвать его ПриВыбореЗначенияT9


tormozit
#28, 08 декабря 2024 00:06

(27) bolsun, про шаблон я теперь понял, что ты имел ввиду что обработчик события будет шаблон подменять. Но все равно получается лишнее событие.
Все что делает мой обработчик события ПослеВставкиЗначенияT9 , можно делать и в обсуждаемом ПриВыбореЗначенияT9. Поэтому я предлагаю сделать одно событие для решения обеих задач.


bolsun
#29, 08 декабря 2024 00:12

(28) tormozit, пусть будет ПриВыбореЗначения, главное самому не модифицировать модуль, а просто заменить шаблон для вставки.


bolsun
#30, ред. 08 декабря 2024 20:47

6.3.9108.34414
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

API

  • Добавлен обработчик ПриВыбореЗначенияT9(Параметры, ШаблонДляВставки, Отказ, СтандартнаяОбработка)

Параметры - Структура.

  • Значение,ЭтоМетод,КлючСловаря,Описание
  • ШаблонДляВставки - новое значение для вставки в формате шаблона T9. Необходима установка параметра СтандартнаяОбработка = Ложь;

Рекомендуется избегать любых интерактивных действий в процессе выполнения обработчика.


tormozit
#31, ред. 08 декабря 2024 19:55

(30) bolsun, событие ПриВыбореЗначенияT9 вызывается, но шаблон не применяется. Тестировал так

	ШаблонДляВставки = ШаблонДляВставки + "ъъ";
	Сообщить("Шаблон=" + ШаблонДляВставки);


bolsun
#32, 08 декабря 2024 20:46

(31) tormozit, установи СтандартнаяОбработка = Ложь;


bolsun
#33, 08 декабря 2024 20:51

(32) bolsun, если просто собираешь статистику и заменять не будешь, то Истина (по умолчанию)


tormozit
#34, 08 декабря 2024 21:02

(32) bolsun, Да. Так сработало.


tormozit
#35, ред. 08 декабря 2024 21:21

Решил пока сохранить использование обоих событий, т.к. обновление статистики хоть и редко но может занять несколько миллисекунд. А событие ПослеВставкиЗначенияT9, как я понимаю, вызывается уже после появления вставленного текста в модуле.


tormozit
#36, ред. 08 декабря 2024 21:18

Есть проблема. Я в шаблоне указываю смещение первого печатного символа новых строк. А Турбоконф это игнорирует и делает смещение такое же как у первой строки. Можно как то разрешить мне управлять этим?

Турбоконф

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Совук КАК Совук
    ПО Жультун.ДатаНовая = Совук.Дата
    И Жультун.ИмяНовое = Совук.Имя
    И Жультун.КонтрагентНовый = Совук.Контрагент
    И Жультун.СуммаНовая = Совук.Сумма
    И Жультун.ЦенаНовая = Совук.Цена

Оригинал

	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Совук КАК Совук
	ПО Жультун.ДатаНовая = Совук.Дата
		И Жультун.ИмяНовое = Совук.Имя
		И Жультун.КонтрагентНовый = Совук.Контрагент
		И Жультун.СуммаНовая = Совук.Сумма
		И Жультун.ЦенаНовая = Совук.Цена


bolsun
#37, 08 декабря 2024 21:30

(36) tormozit, непонятно в каком фрагменте кода это выполняется, где каретка и т.д.


tormozit
#38, 08 декабря 2024 21:30

Начальный фрагмент

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Совук КАК Совук
    ПО Жультун.ДатаНовая = Совук.


bolsun
#39, 08 декабря 2024 21:53

(38) tormozit, я сам форматирую текст перед вставкой, видимо нужен параметр для отключения этого.


bolsun
#40, 08 декабря 2024 22:57

(38) tormozit,
6.3.9109.1647
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

Процедура ПриВыбореЗначенияT9(Параметры, ШаблонДляВставки, ФорматироватьТекст, Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФорматироватьТекст = Ложь;
...

КонецПроцедуры


bolsun
#41, 08 декабря 2024 22:58

Текст будет вставлен как есть, без добавления отступов и форматирования.


tormozit
#42, 08 декабря 2024 23:40

(40) bolsun, проверил. Работает.


tormozit
#43, 09 декабря 2024 08:32

tormozit изменил статус на Закрыто


tormozit
#44, ред. 11 декабря 2024 06:58

Если я возвращаю шаблон из обработчика ПриВыбореЗначенияT9, то Турбоконф неожиданно учитывает ЕстьПараметры=Истина и после установки каретки в указанную в шаблоне позицию еще сдвигает ее на одну позицию вправо. Я конечно могу передавать всегда ЕстьПараметры=Ложь, но тогда адаптер будет хуже работать в старых версиях Турбоконфа. Например такая проблема при передаче шаблона
Добавить(<!>)
tormozit изменил статус на Открыто


tormozit
#45, ред. 12 декабря 2024 07:55

Выбираю в списке слово "Для" а в событие приходит "Для_Цикл". Ожидал что получу "Для".

Хотел этим событием исправить давнюю проблему https://turboconf.ru/Tasks/9892


bolsun
#46, 18 декабря 2024 19:02

Исправлено в 6.3.9118.37597

API

  • В обработчик ПриВыбореЗначенияТ9 в поле Значение, теперь передается отображаемое значение.


bolsun
#47, 24 декабря 2024 14:24

bolsun изменил статус на Закрыто


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