В смысле? Константой что ли?MVV писал(а):Тогда индекс элемента будет глобальным в рамках родительского окна
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы. Точно так же, как оба могут измениться в другой версии.
Но я говорил вот о чём:
Если ищем TMyComboBox внутри TInpComboDlg, можем найти 3 штуки с многомерными адресами (3, 0), (7) и (11). Глобальными индексами были бы просто числа 0, 1 и 2 соответственно (т.е. номер в порядке обнаружения во всей иерархии).
Правда, в случае диалога копирования могут быть проблемы из-за того, что элементы внутри TMyGroupBox, в том числе элемент (3, 0), создаются только после нажатия кнопки показа опций, следовательно, после раскрытия опций глобальные индексы изменятся... Блин...
Но я говорил вот о чём:
Код: Выделить всё
TInpComboDlg {
0: TMyCheckBox,
1: TButton,
2: TMyCheckBox,
3: TMyGroupBox {
0: TMyComboBox {
0: Edit
},
1: TCheckBox,
2: TCheckBox,
3: TCheckBox
},
4: TButton,
5: TButton,
6: TMyCheckBox,
7: TMyComboBox {
0: Edit
},
8: TButton,
9: TButton,
10: TButton,
11: TMyComboBox {
0: Edit
}
}Правда, в случае диалога копирования могут быть проблемы из-за того, что элементы внутри TMyGroupBox, в том числе элемент (3, 0), создаются только после нажатия кнопки показа опций, следовательно, после раскрытия опций глобальные индексы изменятся... Блин...
Я о другом подумал. Якобы индекс будет только один для всех.MVV писал(а):Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы.
Да, это было бы удобно.MVV писал(а):Глобальными индексами были бы просто числа 0, 1 и 2 соответственно
При нажатии кнопки Опций можно использовать send(<цифра>) для выбора пункта, так что там не страшно.MVV писал(а):следовательно, после раскрытия опций глобальные индексы изменятся... Блин...
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Попробуй. Если не получится - отпишись, пойдём по альтернативному пути.
А до тех пор создавать себе и другим команды преждевременно.
А до тех пор создавать себе и другим команды преждевременно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Что значит не получится? 
Вопрос лишь в том, насколько будет удобно этим пользоваться...
TCFS2 Beta 532
Ищем все комбобоксы в TInpComboDlg:
Маемся дурью (ищем, блин, самый первый TMyComboBox в нашем тотале, и чихать, в каком он окне):
Помимо рекурсивного поиска окна добавилась псевдо-переменная @lvl, обозначающая уровень вложенности вызовов команд/макросов. В частности, эта штука должна хорошо подойти в качестве индекса ячейки хранения, уникальной в пределах каждой функции до выхода из неё.
Продолжаем маяться дурью, но уже с @lvl (ищем тот самый TMyComboBox, запоминаем в ячейке и потом используем вычисленное значение):
Если @lvl везде умножать, скажем, на 10, то в каждой функции можно будет использовать по 10 "локальных" переменных.
Вопрос лишь в том, насколько будет удобно этим пользоваться...
TCFS2 Beta 532
Ищем все комбобоксы в TInpComboDlg:
Код: Выделить всё
TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , findwnd(TInpComboDlg), index, 1)))"Код: Выделить всё
TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , , 0, 1)))"Продолжаем маяться дурью, но уже с @lvl (ищем тот самый TMyComboBox, запоминаем в ячейке и потом используем вычисленное значение):
Код: Выделить всё
TCFS2.exe /ef "eval(varset(@lvl, findwnd(TMyComboBox, , , 0, 1)) + settext(`combo: ` varget(@lvl-1)) + settext(`hello!`, varget(@lvl-1)))"От findwnd в вызовах так и не избавились в итоге...
Поскольку ты в ini добавил settext_wait, то как оно должно быть? Было:Стало? Не так же?:
Поскольку ты в ini добавил settext_wait, то как оно должно быть? Было:
Код: Выделить всё
/ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMyGroupBox,,findwnd(TPanel,,findwnd(TMultiRename),1),4))))"Код: Выделить всё
/ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMultiRename),1,1)))"Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Не вижу смысла избавляться от них, т.к. это универсальный вариант, для полноценной замены которого понадобится не один специализированный макрос.От findwnd в вызовах так и не избавились в итоге...
Почему не так? Работает так же, пишет в то же поле ввода. Но при этом заметно короче. Чтобы ещё сократить, можно написать макрос findchild для поиска элемента в окне с заданным классом...Стало? Не так же?:
Чуть соптимизировал вычисление параметров для findwnd, вроде по-прежнему работает:
TCFS2 Beta 534
У меня ничего не пишет.MVV писал(а):Почему не так? Работает так же, пишет в то же поле ввода.
И что там сократится?MVV писал(а):можно написать макрос findchild для поиска элемента в окне с заданным классом.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Щас на 9.0aRC1 проверил, нужен 5-й индекс (проверил через WinScanner, всё так):У меня ничего не пишет.
Код: Выделить всё
TCFS2 /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMultiRename),5,1)))"Ну будет один вызов вместо двух, чуть-чуть короче:И что там сократится?
Код: Выделить всё
TCFS2 /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findchld(TMultiRename,,TMyComboBox,,5,1)))"Так-так, стоп. А где же удобство, о котором шла речь?MVV писал(а):проверил, нужен 5-й индекс
5 вместо 1 - это уже не порядок, а беспорядок.Глобальными индексами были бы просто числа 0, 1 и 2 соответственно (т.е. номер в порядке обнаружения во всей иерархии).
Почти не меняет картину. 1 вместо 3-х ещё куда бы не шло. Или хотя бы название не findchld, а что-то покороче. fch, например.MVV писал(а):Ну будет один вызов вместо двух
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ну как, удобство в том, что индекс всегда одномерный. А о том, что его сложно будет определять, я сразу сказал.Так-так, стоп. А где же удобство, о котором шла речь?
Что поделаешь, в окне переименователя туча комбобоксов, и при том порядок у них далеко не самый очевидный.
Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён.MVV писал(а):А о том, что его сложно будет определять, я сразу сказал.
Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится.MVV писал(а):проверил через WinScanner
Можешь с @lvl пару полезных примеров набросать? Без "дури".
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Про код - это дело техники, алгоритм получился вполне себе универсальный.Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён.
Скачал WinExplorer: создается ощущение, что он сортирует окна в дереве по алфавиту... А тут важен именно z-порядок. Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке.Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится.
А в AHK я вообще не знаю, как нумеруются окна, но полагаю, что нумерация там на каждом уровне своя, а не глобальная... В AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно?
Дурь дурью, а зерно здравого смысла в примере было. Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать. А @lvl позволяет не бояться затереть переменную другой функции (но тут, возможно, строковые идентификаторы были бы удобнее).Можешь с @lvl пару полезных примеров набросать? Без "дури".
В Spy++ я видел, а в WinScanner не сразу нашёл кнопку дерева.MVV писал(а):Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке.
Только 1 и начинается с 1.MVV писал(а): AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно?
Смысл мне понятен. Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает? Одно дело запоминать значение, совсем другое - выражение, где есть свои переменные.MVV писал(а):Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать.
И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.