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

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

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

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

Сообщение Flasher »

MVV писал(а):Я решил не добавлять функцию установки текста.
По-моему, ничего плохого в строчке в TCFS2.ini не было бы. К тому же полезность существенная.
MVV писал(а):Так что теперь текст можно ставить через них.
А как к ним findwnd приспособить?

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

Сообщение MVV »

По-моему, ничего плохого в строчке в TCFS2.ini не было бы. К тому же полезность существенная.
Команду в [Items], само собой, добавлю.
А как к ним findwnd приспособить?
Как-то так:

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

TCFS2 /ef "sendmsg(findwnd(TInpComboDlg), $0C, 0, `Копироваю`)"

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

TCFS2 /ef "sendmsg(findwnd(TMyComboBox, , findwnd(TInpComboDlg), 1), $0C, 0, `Сюда`)"
Команды tcm и msg не позволяют задавать дескриптор, только sendmsg.
И что насчёт установки фокуса?
Терпение, мой друг, терпение. :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Команду в [Items], само собой, добавлю.
Лучше макрос.
MVV писал(а):Как-то так:
Давай на конкретном примере.

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

/ef "tcm(314,1) delay(500) sendmsg(findwnd(Edit), $0C, 0, `>блабла`)"
- так не хочет.
MVV писал(а):Терпение, мой друг, терпение.
ОК. Я подумал, что тоже не захотел. :)
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Не, findwnd(Edit) работать не будет - Edit не является окном верхнего уровня.

Если хочешь искать дочерние окна (контролы), обязательно нужно указывать родительское окно (диалоговое окно, модальное окно и т.д.), чтобы системе было понятно, где именно искать этот Edit.

В моём примере контрол TMyComboBox ищется внутри окна с классом TInpComboDlg (само собой, окно должно быть открыто).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Я начал с этого, только Edit вижу как поле внутри TMyComboBox, и ещё я индекс указывал, а не надо было:

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

/ef "tcm(314,1) delay(50) sendmsg(findwnd(TMyComboBox, ,findwnd(TCOMBOINPUT)), $0C, 0, `>блабла`)"
:)
Пытаюсь написать макрос:

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

set_wait=loop(@<=if_empty(#5,5) && if(findwnd(#2)+findwnd(#3),sendmsg(findwnd(#2,,findwnd(#3),#4),$0C,0,#1)*0,delay(30)))
Вызов:

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

/ef tcm(314,1) eval(set_wait(`>блабла`,TMyComboBox,TCOMBOINPUT))
/ef tcm(508,1) eval(set_wait(`7z:"Test.7Z"`,TAltEdit,TDLGZIP))
Но цикл раньше прерывается. Если в delay пишу 50 вместо 30, то срабатывает, но это то же самое, что и без макроса.
Сокращаю макрос:

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

set_wait=loop(@<=if(findwnd(#2)+findwnd(#3),sendmsg(findwnd(#2,,findwnd(#3),#4),$0C,0,#1)*0,delay(20)))
Срабатывает, значит, работает шустрее, т.к. при установке delay(10) - тишь. Что я не так делаю?
Вот так ещё с меньшими delay:

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

set_wait=loop(@<=if(findwnd(#2)+findwnd(#3),sendmsg(findwnd(#2))*sendmsg(findwnd(#3))*sendmsg(findwnd(#2,,findwnd(#3),#4),$0C,0,#1)*0,delay(10)))
, но опять-таки зависит от скорости появления окна.
И как быть с окнами, где есть комбобоксы без Edit и/или другие подокна у контролов?:

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

/ef tcm(508,1) eval(set_wait(`7z`,TMyComboBox,TDLGZIP,1))
/ef tcm(2400,1) eval(set_wait(`[N]blabla`,TMyComboBox,TMultiRename,6))
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
У меня с 522 версией возникли непонятные эффекты. Например, отображаются не те, что надо элементы интерфейса при переходе в полноэкранный режим (по F11) и обратно, причём возврат в исходное состояние происходит не со второго, а с четвёртого нажатия.
Иначе, чем раньше, к примеру работает команда /ei kb1.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Я начал с этого, только Edit вижу как поле внутри TMyComboBox
Да, Edit внутри TMyComboBox, значит, он не найдётся внутри самого окна. Но и сам TMyComboBox вполне корректно обрабатывает WM_SETTEXT.
Flasher писал(а):Что я не так делаю?
Первое, что бросается в глаза - условие findwnd(#2)+findwnd(#3). Оно проверяет, что существует хотя бы одно из окон (раз ты складываешь результаты). Далее, потом ты ищешь окно #2 внутри окна #3... У тебя #2 выступает то в роли окна верхнего уровня, то в роли дочернего. Если ты хочешь узнать, когда появится дочернее окно, чтобы задать ему текст, искать его для проверки надо так же, как и для отправки.
Flasher писал(а):И как быть с окнами, где есть комбобоксы без Edit и/или другие подокна у контролов?
Если комбобокс редактируемый, ему прямо можно слать WM_SETTEXT, а если нет - надо слать другие сообщения (например, есть CB_SETCURSEL для выделения строки с заданным индексом, а также CB_FINDSTRING для поиска строки).
sa писал(а):Иначе, чем раньше, к примеру работает команда /ei kb1.
У меня она так же работает, как и раньше - показывает комстроку... Нужно больше деталей проблемы.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
kb1 работает как переключатель показа кнопок функциональных клавиш (вкл/выкл/вкл....)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, kb1 показывает F-кнопки, я не туда посмотрел, причём работает нормально. Нужно ещё больше деталей.

Кстати, теперь можно выводить сообщения об ошибках и временные значения в заголовок окна! :D

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

TCFS2.exe /ei "settext(`hasStatusBar: ` eval(hasStatusBar))"
TCFS2.exe /ei "settext(`hasStatusBar: ` eval(hasStatusBar), findwnd(TInpComboDlg))"
Собственно, settext:

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

[Items]
settext=eval(settext(#1, #2))
[Macros]
settext=if(null(#2), msg($0C, 0, `` #1), sendmsg(#2, $0C, 0, `` #1))
(пустые кавычки перед параметром нужны, чтобы гарантированно сделать его строковым, если кто-то попытается вызвать settext(42))
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
У меня команда kb1 работает как переключатель (вкл/выкл), kb0 не работает вовсе. Аналогично с sb, dt, dc.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Всё равно мало деталей. Мало для воспроизведения проблемы.

Пробовал с дефолтным конфигом?

Чтобы kb1 срабатывала всегда, а kb0 - никогда, условие eval(!hasKeyButtons) должно быть всегда истинно...
Проверь выражение при различных состояниях панели F-клавиш (у меня пишет 0 или 1 в заголовке правильно):

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

TCFS2.exe /ei "settext(`hasKeyButtons: ` eval(hasKeyButtons))"
Проверь раскрытое выражение при различных состояниях панели F-клавиш (у меня пишет правильно):

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

TCFS2.exe /ei "settext(`hasKeyButtons: ` tcini(Layout, KeyButtons, 1))"
Добавлено спустя 15 минут:

Понял, проблема с редиректом wincmd.ini...
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

С дефолтным пробовал. Редиректа [Layout] нет. Смущает, что как только копирую вместо 522 версии 512 всё работает как обычно.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Исправил, попробуй новую:

TCFS2 Beta 524

Как раз и была проблема, когда не было редиректа. Спасибо за бдительность. :)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Исправил, попробуй новую
Ура! А то не знал, что и думать. С 524 версией такой проблемы нет.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Но и сам TMyComboBox вполне корректно обрабатывает WM_SETTEXT.
С этим уже определились. В примерах есть.
MVV писал(а):Первое, что бросается в глаза - условие findwnd(#2)+findwnd(#3). Оно проверяет, что существует хотя бы одно из окон (раз ты складываешь результаты).
И как исправить? С умножением вообще не срабатывает.
MVV писал(а):Если ты хочешь узнать, когда появится дочернее окно, чтобы задать ему текст, искать его для проверки надо так же, как и для отправки.
Можешь макросом? Не улавливаю. Я пробовал избавиться от дочернего окна, но становилось только хуже.
MVV писал(а):Если комбобокс редактируемый, ему прямо можно слать WM_SETTEXT, а если нет - надо слать другие сообщения (например, есть CB_SETCURSEL для выделения строки с заданным индексом, а также CB_FINDSTRING для поиска строки).
И как это сделать через TCFS2? Я привёл 2 примера, один из которых имеет редактируемый комбобокс. Хотелось бы конкретики.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить