Быстрое получение этих параметров (в первую очередь имени метода) нужно для ведения истории последних методов https://fastcode.im/Templates/10156
Если индикаторы этих параметров скрыты, то пусть будет Неопределено.
0 0
ред. 23 марта 2025 14:23
Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.
Комментарии
bolsun #1, 15 марта 2025 11:59
Значения строки и колонки я еще давно пытался использовать для определения положения каретки, но это не получится, т.к. эти значения в UIA обновляются только при смене текущего окна.
bolsun изменил статус на Открыто
0
bolsun #2, ред. 15 марта 2025 12:08
Я отслеживаю позицию каретку на лету. Метод для получения позиции каретки можно добавить в API, но в режиме совместимости она будет обновляется не во всех случаях (только при редактировании).
0
bolsun #3, 15 марта 2025 12:30
(2) bolsun, хотя и позиция и текст модуля уже доступны через API в ТекущийДокумент и ПоследнийДокумент.
0
tormozit #4, ред. 15 марта 2025 12:33
(3) bolsun, там затратное обновление - полное. Мне сам текст не нужен. Мне нужно очень быстро брать новое текущее имя метода и желательно позицию.
0
bolsun #5, 15 марта 2025 12:33
(4) tormozit, эти свойства уже есть в Конфигуратор.ТекущийДокумент
0
bolsun #6, ред. 15 марта 2025 12:36
А также есть очень быстрые методы ТекстовыйПроцессор.ПолучитьТекстБлокаСлева() из него извлечь имя метода достаточно просто и быстро.
(5) bolsun, вот известное мне описание свойств документа:
Перем Заголовок Экспорт; // Строка - заголовок окна документа
Перем ЗаголовокКонфигуратора Экспорт; // Строка
Перем ИмяКонфигурации Экспорт; // Строка - "Внешний модуль", "" - привязка не выполнялась, "?" - привязка была неуспешна
Перем ТипДокумента Экспорт; // Строка - "Неизвестный", "ОбычныйМодуль", "МодульФормы", "Шаблон", "Макет", "СлужебныеСообщения".
Перем ЭтоМодульВнешнегоОбъекта Экспорт; // Булево
Перем DocumentRuntimeId Экспорт; // Строка - последовательность чисел, обычно сначала идут числа идентификатора родительского главного окна, затем самого элемента
Перем ConfRuntimeId Экспорт; // Строка - идентификатор окна конфигурации (основной или расширения или внешнего объекта метаданных)
Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!
0
tormozit #8, 15 марта 2025 12:36
Обрати внимание на комментарии к 2-м последним свойствам Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!
0
tormozit #9, 15 марта 2025 12:38
Возможно я бы смог использовать эти свойства, если бы понимал как они обновляются.
0
bolsun #10, 15 марта 2025 12:39
(8) tormozit, так или иначе других способов получить позицию на данный момент нет и скорее всего не будет.
0
bolsun #11, 15 марта 2025 12:40
Либо 100% надежный принудительно через ПолучитьТекстМодуля.
Либо последняя известная позиция.
0
bolsun #12, 15 марта 2025 12:41
(9) tormozit, в режиме совместимости обновляются только при изменении текста. В обычном режиме после изменения текста или кликов мышью.
0
bolsun #13, 15 марта 2025 12:44
Также текущая позиция и текст модуля, доступны в параметрах обработчика ПриПолученииДанныхT9
0
tormozit #14, 15 марта 2025 12:46
(12) bolsun, понял. Обновил документацию этих свойств.
0
tormozit #15, 18 марта 2025 08:47
Можно хотя бы сделать получение текста из поля выбора имени метода без установки фокуса в него?
Получить и запомнить его RuntimeId. Читать его значение. Кажется это должно быть намного быстрее чем ПолучитьТекстМодуля().
0
tormozit #16, ред. 23 марта 2025 11:00
(12) bolsun, к сожалению при кликах свойство "Позиция" не обновляется. Удалил из документации эту информацию. Может ты забыл указать еще какое то условие?
0
bolsun #17, ред. 23 марта 2025 11:41
(16) tormozit, да, в ТекущемДокументе свойство Позиция обновляется только при изменении текста.
0
tormozit #18, ред. 23 марта 2025 11:57
Помучался, но так и не смог без вызова ПолучитьТекстМодуля() сделать фоновое НЕнадежное отслеживание смены текущего метода. Вызов ПолучитьТекстМодуля() делать не хочу, чтобы не добавлять лишние задержки в редактирование модуля - история активных методов не стоит такой жертвы.
Но решение задачи https://turboconf.ru/Tasks/10169 уже бы заметно улучшило эффект от истории методов. Кажется решить ее можно довольно просто на стороне Турбоконфа.
0
bolsun #19, 23 марта 2025 13:44
(18) tormozit, используй ПоследнийДокумент, а не ТекущийДокумент. ТекущийДокумент обновляет позицию не во всех случаях, а также ненадежно из него получать, т.к. скрипт может быть вызван из меню, что может сбрасывать это свойство.
0
bolsun #20, 23 марта 2025 13:44
Также все это имеет смысл, только для идентифицированного модуля.
0
bolsun #21, 23 марта 2025 14:09
Не уверен, что просто смена позиции (без редактирования текста) полезна для истории методов.
Пользователь может просто перемещаться к нужному методу и в процессе текущий метод будет меняться, что захламит историю.
0
bolsun #22, 23 марта 2025 14:15
Если же нужно получить текущий метод при вызове команды скрипта, то да - через свойство ПоследнийДокумент.
Но ты не сможешь отслеживать всю историю, т.к. есть куча других скриптов, которые может вызывать пользователь и тот же переход из Процедуры и функции.
Я также планировал добавить историю редактирования (переходов, вызовов скриптов), возможно проще будет отдавать тебе список этих позиций через АПИ.
0
tormozit #23, 23 марта 2025 14:23
(21) bolsun, Да, просто смена позиции будет давать много мало полезных добавок в историю. Поэтому нужно учитывать дополнительные условия, как например длительное удержание фокуса в одном методе (более 5 секунд). Аналогичный подход я применяю к ведению истории открытых форм в ИР.
#1, 15 марта 2025 11:59
Значения строки и колонки я еще давно пытался использовать для определения положения каретки, но это не получится, т.к. эти значения в UIA обновляются только при смене текущего окна.
bolsun изменил статус на Открыто
#2, ред. 15 марта 2025 12:08
Я отслеживаю позицию каретку на лету. Метод для получения позиции каретки можно добавить в API, но в режиме совместимости она будет обновляется не во всех случаях (только при редактировании).
#3, 15 марта 2025 12:30
(2) bolsun, хотя и позиция и текст модуля уже доступны через API в ТекущийДокумент и ПоследнийДокумент.
#4, ред. 15 марта 2025 12:33
(3) bolsun, там затратное обновление - полное. Мне сам текст не нужен. Мне нужно очень быстро брать новое текущее имя метода и желательно позицию.
#5, 15 марта 2025 12:33
(4) tormozit, эти свойства уже есть в Конфигуратор.ТекущийДокумент
#6, ред. 15 марта 2025 12:36
А также есть очень быстрые методы ТекстовыйПроцессор.ПолучитьТекстБлокаСлева() из него извлечь имя метода достаточно просто и быстро.
ПолучитьТекстБлокаСлева()
ПолучитьТекстМетодаИзПозиции()
ПолучитьПозициюПоИндексу()
ПолучитьИндексИзПозиции()
ПолучитьТекущуюСтрокуИзПозиции()
#7, 15 марта 2025 12:35
(5) bolsun, вот известное мне описание свойств документа:
Перем Заголовок Экспорт; // Строка - заголовок окна документа
Перем ЗаголовокКонфигуратора Экспорт; // Строка
Перем ИмяКонфигурации Экспорт; // Строка - "Внешний модуль", "" - привязка не выполнялась, "?" - привязка была неуспешна
Перем ТипДокумента Экспорт; // Строка - "Неизвестный", "ОбычныйМодуль", "МодульФормы", "Шаблон", "Макет", "СлужебныеСообщения".
Перем ЭтоМодульВнешнегоОбъекта Экспорт; // Булево
Перем DocumentRuntimeId Экспорт; // Строка - последовательность чисел, обычно сначала идут числа идентификатора родительского главного окна, затем самого элемента
Перем ConfRuntimeId Экспорт; // Строка - идентификатор окна конфигурации (основной или расширения или внешнего объекта метаданных)
Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!
#8, 15 марта 2025 12:36
Обрати внимание на комментарии к 2-м последним свойствам
Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!
#9, 15 марта 2025 12:38
Возможно я бы смог использовать эти свойства, если бы понимал как они обновляются.
#10, 15 марта 2025 12:39
(8) tormozit, так или иначе других способов получить позицию на данный момент нет и скорее всего не будет.
#11, 15 марта 2025 12:40
Либо 100% надежный принудительно через ПолучитьТекстМодуля.
Либо последняя известная позиция.
#12, 15 марта 2025 12:41
(9) tormozit, в режиме совместимости обновляются только при изменении текста. В обычном режиме после изменения текста или кликов мышью.
#13, 15 марта 2025 12:44
Также текущая позиция и текст модуля, доступны в параметрах обработчика ПриПолученииДанныхT9
#14, 15 марта 2025 12:46
(12) bolsun, понял. Обновил документацию этих свойств.
#15, 18 марта 2025 08:47
Можно хотя бы сделать получение текста из поля выбора имени метода без установки фокуса в него?

Получить и запомнить его RuntimeId. Читать его значение. Кажется это должно быть намного быстрее чем ПолучитьТекстМодуля().
#16, ред. 23 марта 2025 11:00
(12) bolsun, к сожалению при кликах свойство "Позиция" не обновляется. Удалил из документации эту информацию. Может ты забыл указать еще какое то условие?
#17, ред. 23 марта 2025 11:41
(16) tormozit, да, в ТекущемДокументе свойство Позиция обновляется только при изменении текста.
#18, ред. 23 марта 2025 11:57
Помучался, но так и не смог без вызова ПолучитьТекстМодуля() сделать фоновое НЕнадежное отслеживание смены текущего метода. Вызов ПолучитьТекстМодуля() делать не хочу, чтобы не добавлять лишние задержки в редактирование модуля - история активных методов не стоит такой жертвы.
Но решение задачи https://turboconf.ru/Tasks/10169 уже бы заметно улучшило эффект от истории методов. Кажется решить ее можно довольно просто на стороне Турбоконфа.
#19, 23 марта 2025 13:44
(18) tormozit, используй ПоследнийДокумент, а не ТекущийДокумент. ТекущийДокумент обновляет позицию не во всех случаях, а также ненадежно из него получать, т.к. скрипт может быть вызван из меню, что может сбрасывать это свойство.
#20, 23 марта 2025 13:44
Также все это имеет смысл, только для идентифицированного модуля.
#21, 23 марта 2025 14:09
Не уверен, что просто смена позиции (без редактирования текста) полезна для истории методов.
Пользователь может просто перемещаться к нужному методу и в процессе текущий метод будет меняться, что захламит историю.
#22, 23 марта 2025 14:15
Если же нужно получить текущий метод при вызове команды скрипта, то да - через свойство ПоследнийДокумент.
Но ты не сможешь отслеживать всю историю, т.к. есть куча других скриптов, которые может вызывать пользователь и тот же переход из Процедуры и функции.
Я также планировал добавить историю редактирования (переходов, вызовов скриптов), возможно проще будет отдавать тебе список этих позиций через АПИ.
#23, 23 марта 2025 14:23
(21) bolsun, Да, просто смена позиции будет давать много мало полезных добавок в историю. Поэтому нужно учитывать дополнительные условия, как например длительное удержание фокуса в одном методе (более 5 секунд). Аналогичный подход я применяю к ведению истории открытых форм в ИР.