View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Dec 01, 2016 15:29 Post subject: |
|
|
MVV wrote: | Тогда индекс элемента будет глобальным в рамках родительского окна | В смысле? Константой что ли? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Thu Dec 01, 2016 16:06 Post subject: |
|
|
Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы. Точно так же, как оба могут измениться в другой версии.
Но я говорил вот о чём:
Code: | 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
}
} |
Если ищем TMyComboBox внутри TInpComboDlg, можем найти 3 штуки с многомерными адресами (3, 0), (7) и (11). Глобальными индексами были бы просто числа 0, 1 и 2 соответственно (т.е. номер в порядке обнаружения во всей иерархии).
Правда, в случае диалога копирования могут быть проблемы из-за того, что элементы внутри TMyGroupBox, в том числе элемент (3, 0), создаются только после нажатия кнопки показа опций, следовательно, после раскрытия опций глобальные индексы изменятся... Блин... _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Dec 01, 2016 16:32 Post subject: |
|
|
MVV wrote: | Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы. | Я о другом подумал. Якобы индекс будет только один для всех.
MVV wrote: | Глобальными индексами были бы просто числа 0, 1 и 2 соответственно | Да, это было бы удобно.
MVV wrote: | следовательно, после раскрытия опций глобальные индексы изменятся... Блин... | При нажатии кнопки Опций можно использовать send(<цифра>) для выбора пункта, так что там не страшно. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Dec 01, 2016 18:10 Post subject: |
|
|
Попробуй. Если не получится - отпишись, пойдём по альтернативному пути.
А до тех пор создавать себе и другим команды преждевременно. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sat Dec 03, 2016 02:57 Post subject: |
|
|
Что значит не получится?
Вопрос лишь в том, насколько будет удобно этим пользоваться...
TCFS2 Beta 532
Ищем все комбобоксы в TInpComboDlg:
Code: | TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , findwnd(TInpComboDlg), index, 1)))" |
Маемся дурью (ищем, блин, самый первый TMyComboBox в нашем тотале, и чихать, в каком он окне):
Code: | TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , , 0, 1)))" |
Помимо рекурсивного поиска окна добавилась псевдо-переменная @lvl, обозначающая уровень вложенности вызовов команд/макросов. В частности, эта штука должна хорошо подойти в качестве индекса ячейки хранения, уникальной в пределах каждой функции до выхода из неё.
Продолжаем маяться дурью, но уже с @lvl (ищем тот самый TMyComboBox, запоминаем в ячейке и потом используем вычисленное значение):
Code: | TCFS2.exe /ef "eval(varset(@lvl, findwnd(TMyComboBox, , , 0, 1)) + settext(`combo: ` varget(@lvl-1)) + settext(`hello!`, varget(@lvl-1)))" |
Если @lvl везде умножать, скажем, на 10, то в каждой функции можно будет использовать по 10 "локальных" переменных. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Dec 03, 2016 03:35 Post subject: |
|
|
От findwnd в вызовах так и не избавились в итоге...
Поскольку ты в ini добавил settext_wait, то как оно должно быть? Было:
Code: | /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMyGroupBox,,findwnd(TPanel,,findwnd(TMultiRename),1),4))))" | Стало? Не так же?:
Code: | /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMultiRename),1,1)))" |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sat Dec 03, 2016 03:58 Post subject: |
|
|
Quote: | От findwnd в вызовах так и не избавились в итоге... |
Не вижу смысла избавляться от них, т.к. это универсальный вариант, для полноценной замены которого понадобится не один специализированный макрос.
Quote: | Стало? Не так же?: |
Почему не так? Работает так же, пишет в то же поле ввода. Но при этом заметно короче. Чтобы ещё сократить, можно написать макрос findchild для поиска элемента в окне с заданным классом...
Чуть соптимизировал вычисление параметров для findwnd, вроде по-прежнему работает:
TCFS2 Beta 534 _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Dec 03, 2016 04:06 Post subject: |
|
|
MVV wrote: | Почему не так? Работает так же, пишет в то же поле ввода. | У меня ничего не пишет.
MVV wrote: | можно написать макрос findchild для поиска элемента в окне с заданным классом. | И что там сократится? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sun Dec 04, 2016 01:08 Post subject: |
|
|
Quote: | У меня ничего не пишет. |
Щас на 9.0aRC1 проверил, нужен 5-й индекс (проверил через WinScanner, всё так):
Code: | TCFS2 /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findwnd(TMyComboBox,,findwnd(TMultiRename),5,1)))" |
Quote: | И что там сократится? |
Ну будет один вызов вместо двух, чуть-чуть короче:
Code: | TCFS2 /ef "tcm(2400,1) eval(settext_wait(`yohoho`, findchld(TMultiRename,,TMyComboBox,,5,1)))" |
_________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 04, 2016 01:56 Post subject: |
|
|
MVV wrote: | проверил, нужен 5-й индекс | Так-так, стоп. А где же удобство, о котором шла речь? Quote: | Глобальными индексами были бы просто числа 0, 1 и 2 соответственно (т.е. номер в порядке обнаружения во всей иерархии). | 5 вместо 1 - это уже не порядок, а беспорядок.
MVV wrote: | Ну будет один вызов вместо двух | Почти не меняет картину. 1 вместо 3-х ещё куда бы не шло. Или хотя бы название не findchld, а что-то покороче. fch, например. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sun Dec 04, 2016 02:26 Post subject: |
|
|
Quote: | Так-так, стоп. А где же удобство, о котором шла речь? |
Ну как, удобство в том, что индекс всегда одномерный. А о том, что его сложно будет определять, я сразу сказал.
Что поделаешь, в окне переименователя туча комбобоксов, и при том порядок у них далеко не самый очевидный. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 04, 2016 05:48 Post subject: |
|
|
MVV wrote: | А о том, что его сложно будет определять, я сразу сказал. | Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён.
MVV wrote: | проверил через WinScanner | Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится.
Можешь с @lvl пару полезных примеров набросать? Без "дури". _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sun Dec 04, 2016 13:21 Post subject: |
|
|
Quote: | Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён. |
Про код - это дело техники, алгоритм получился вполне себе универсальный.
Quote: | Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится. |
Скачал WinExplorer: создается ощущение, что он сортирует окна в дереве по алфавиту... А тут важен именно z-порядок. Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке.
А в AHK я вообще не знаю, как нумеруются окна, но полагаю, что нумерация там на каждом уровне своя, а не глобальная... В AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно?
Quote: | Можешь с @lvl пару полезных примеров набросать? Без "дури". |
Дурь дурью, а зерно здравого смысла в примере было. Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать. А @lvl позволяет не бояться затереть переменную другой функции (но тут, возможно, строковые идентификаторы были бы удобнее). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 04, 2016 23:23 Post subject: |
|
|
MVV wrote: | Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке. | В Spy++ я видел, а в WinScanner не сразу нашёл кнопку дерева.
MVV wrote: | AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно? | Только 1 и начинается с 1.
MVV wrote: | Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать. | Смысл мне понятен. Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает? Одно дело запоминать значение, совсем другое - выражение, где есть свои переменные.
И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|