TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Тогда индекс элемента будет глобальным в рамках родительского окна
В смысле? Константой что ли?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы. Точно так же, как оба могут измениться в другой версии.

Но я говорил вот о чём:

Код: Выделить всё

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), создаются только после нажатия кнопки показа опций, следовательно, после раскрытия опций глобальные индексы изменятся... Блин...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Ну как, в рамках конкретной версии что глобальный индекс, что локальный - константы.
Я о другом подумал. Якобы индекс будет только один для всех. :mrgreen:
MVV писал(а):Глобальными индексами были бы просто числа 0, 1 и 2 соответственно
Да, это было бы удобно.
MVV писал(а):следовательно, после раскрытия опций глобальные индексы изменятся... Блин...
При нажатии кнопки Опций можно использовать send(<цифра>) для выбора пункта, так что там не страшно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Да, это было бы удобно.
Удобно использовать - да, но вот определять этот индекс...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Попробуй. Если не получится - отпишись, пойдём по альтернативному пути.
А до тех пор создавать себе и другим команды преждевременно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Что значит не получится? :D
Вопрос лишь в том, насколько будет удобно этим пользоваться...

TCFS2 Beta 532

Ищем все комбобоксы в TInpComboDlg:

Код: Выделить всё

TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , findwnd(TInpComboDlg), index, 1)))"
Маемся дурью (ищем, блин, самый первый TMyComboBox в нашем тотале, и чихать, в каком он окне):

Код: Выделить всё

TCFS2.exe /ef "eval(settext(findwnd(TMyComboBox, , , 0, 1)))"
Помимо рекурсивного поиска окна добавилась псевдо-переменная @lvl, обозначающая уровень вложенности вызовов команд/макросов. В частности, эта штука должна хорошо подойти в качестве индекса ячейки хранения, уникальной в пределах каждой функции до выхода из неё.

Продолжаем маяться дурью, но уже с @lvl (ищем тот самый TMyComboBox, запоминаем в ячейке и потом используем вычисленное значение):

Код: Выделить всё

TCFS2.exe /ef "eval(varset(@lvl, findwnd(TMyComboBox, , , 0, 1)) + settext(`combo: ` varget(@lvl-1)) + settext(`hello!`, varget(@lvl-1)))"
Если @lvl везде умножать, скажем, на 10, то в каждой функции можно будет использовать по 10 "локальных" переменных.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

От findwnd в вызовах так и не избавились в итоге...

Поскольку ты в 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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

От findwnd в вызовах так и не избавились в итоге...
Не вижу смысла избавляться от них, т.к. это универсальный вариант, для полноценной замены которого понадобится не один специализированный макрос.
Стало? Не так же?:
Почему не так? Работает так же, пишет в то же поле ввода. Но при этом заметно короче. Чтобы ещё сократить, можно написать макрос findchild для поиска элемента в окне с заданным классом...


Чуть соптимизировал вычисление параметров для findwnd, вроде по-прежнему работает:

TCFS2 Beta 534
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Почему не так? Работает так же, пишет в то же поле ввода.
У меня ничего не пишет.
MVV писал(а):можно написать макрос findchild для поиска элемента в окне с заданным классом.
И что там сократится?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

У меня ничего не пишет.
Щас на 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)))"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):проверил, нужен 5-й индекс
Так-так, стоп. А где же удобство, о котором шла речь?
Глобальными индексами были бы просто числа 0, 1 и 2 соответственно (т.е. номер в порядке обнаружения во всей иерархии).
5 вместо 1 - это уже не порядок, а беспорядок. :?
MVV писал(а):Ну будет один вызов вместо двух
Почти не меняет картину. 1 вместо 3-х ещё куда бы не шло. Или хотя бы название не findchld, а что-то покороче. fch, например.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Так-так, стоп. А где же удобство, о котором шла речь?
Ну как, удобство в том, что индекс всегда одномерный. А о том, что его сложно будет определять, я сразу сказал.
Что поделаешь, в окне переименователя туча комбобоксов, и при том порядок у них далеко не самый очевидный.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А о том, что его сложно будет определять, я сразу сказал.
Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён.
MVV писал(а):проверил через WinScanner
Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится.

Можешь с @lvl пару полезных примеров набросать? Без "дури".
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Я полагал, что ты пишешь про код, а не пользовательские настройки, где порядок, если верить выделенному, должен быть учтён.
Про код - это дело техники, алгоритм получился вполне себе универсальный. :)
Это который от InqSoft? А где там индекс можно увидеть? WinExplorer, например, выдаёт другую последовательность. Индексация в AHK также иначе строится.
Скачал WinExplorer: создается ощущение, что он сортирует окна в дереве по алфавиту... А тут важен именно z-порядок. Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке.
А в AHK я вообще не знаю, как нумеруются окна, но полагаю, что нумерация там на каждом уровне своя, а не глобальная... В AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно?
Можешь с @lvl пару полезных примеров набросать? Без "дури".
Дурь дурью, а зерно здравого смысла в примере было. Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать. А @lvl позволяет не бояться затереть переменную другой функции (но тут, возможно, строковые идентификаторы были бы удобнее).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Из имеющихся у меня утилит InqSoft WinScanner и Microsoft Spy++ показывают окна в дереве именно в z-порядке.
В Spy++ я видел, а в WinScanner не сразу нашёл кнопку дерева.
MVV писал(а): AHK в разных групбоксах переименователя нумерация классов с 1 начинается? Или комбобокс с каждым номером только 1 на всё окно?
Только 1 и начинается с 1.
MVV писал(а):Если надо несколько раз в пределах функции использовать одно и то же выражение, можно его 1 раз сохранить в переменную и потом считывать.
Смысл мне понятен. Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает? Одно дело запоминать значение, совсем другое - выражение, где есть свои переменные.

И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить