Сделал команду перехода по синтаксическим элементам встроенного языка. Назначил ей сочетание клавиш CTRL+B (анг.). Зажал CTRL. Нажал клавишу "B" (анг.). Команда сработала и вызвала функцию ТурбоКонф.ПерейтиВПозицию() и выделила в тексте нужный элемент.
Снова нажимаю клавишу "B" (анг.), чтобы выполнить переход к следующему элементу текста. Но вместо вызова моей команды выделенный текст заменяется на "и", т.к. Турбоконф виртуально отпустил клавишу "CTRL" и система просто приняла нажатие клавиши "B" (анг.).
Прошу придумать какое то решение проблемы. Хотя бы какую то защиту от порчи текста в этой ситуации.
#1, 25 февраля 2024 19:34
Модификаторы обычно восстанавливаются после вызова скрипта. Это отключено при вызова внешнего окна, насколько я помню были какие-то проблемы с этим.
Можно попробовать вернуть стандартное поведение.
#2, ред. 25 февраля 2024 19:41
Функция команды из интерактивных действий вызывает только Турбоконф.ПерейтиВПозицию(). Других окон она не открывает и не вызывает отправку нажатия клавиш.
#3, 25 февраля 2024 19:41
(2) tormozit, тогда нужен рабочий скрипт полностью, для теста
#4, ред. 25 февраля 2024 19:45
(3) bolsun, в опубликованном скрипте уже есть похожая команда "Перейти к определению". Назначь ей это сочетание клавиш и будет та же проблема. С этой командой можно встать на любую переменную в тексте модуля и она выделит ее определение. Затем нужно снова ее вызывать, не отпуская CTRL. Тогда текст будет испорчен.
#5, ред. 25 февраля 2024 20:23
Скрипт RDT сам принудительно запрещает восстановление модификаторов вызовом
ТурбоКонф.ОтжатьМодификаторы(); //Метод запрещает восстановление модификаторов. после выполнения скрипта
Эта метод - устаревший и используется только для совместимости со старыми версиями. Он был в свое время заменен на метод и свойство, с более понятными названиями.
Если нужно изменить текущее состояние модификаторов, нужно вызывать ТурбоКонф.ОтжатьВсеМодификаторы();
#6, ред. 25 февраля 2024 20:25
После того, как я убрал все вызовы ТурбоКонф.ОтжатьМодификаторы() в скрипте RDT - состояние модификаторов после ПерейтиКОпределению по Ctrl+B восстанавливается.
#7, 25 февраля 2024 20:40
Закомментировал все вызовы ТурбоКонф.ОтжатьМодификаторы(). У новой команды проблема тоже пропала. Видимо где то во вложенных вызовах вызывалась.
tormozit изменил статус на Закрыто
#8, ред. 25 февраля 2024 20:51
Еще бы подобную проблему при вызове подсказки ввода Т9 после открытия штатного окна решить (CTRL зажал, нажал Space, нажал Space - вставляется пробел).
#9, ред. 26 февраля 2024 09:45
(7) tormozit, из-за удаления вызова ТурбоКонф.ОтжатьМодификаторы() стал залипать Ctrl в методе ПерейтиКОпределению() в некоторых ситуациях. Пришлось вернуть этот вызов. Так что не все так просто.
#10, 26 февраля 2024 09:01
tormozit изменил статус на Открыто
#11, 26 февраля 2024 10:29
(9) tormozit, используй ТурбоКонф.ОтжатьВсеМодификаторы(), а НЕ ТурбоКонф.ОтжатьМодификаторы()
#12, 26 февраля 2024 17:54
(11) bolsun, а почему? В документации не вижу разницы:
ОтжатьМодификаторы / ReleaseModifiers()
Выполняет принудительное отжатие клавиш Ctrl, Alt и Shift
ОтжатьВсеМодификаторы / ReleaseAllModifiers()
Выполняет принудительное отжатие клавиш Ctrl, Alt и Shift
#13, 26 февраля 2024 17:57
(12) tormozit,
Документация нуждается в обновлении.
тут (5) я подробно все расписал.
#14, ред. 26 февраля 2024 18:02
(13) bolsun, понял. Я не внимательно прочитал вчера (5)
#15, ред. 26 февраля 2024 21:32
(11) bolsun, после переключения на ОтжатьВсеМодификаторы() снова стал стабильно залипать CTRL.
После возвращения на ОтжатьМодификаторы() проблема снова исчезла. Поэтому оставил его. Может позже заменю на равнозначное ТурбоКонф.ОтжатьМодификаторыПослеЗавершенияСкрипта = Истина;