Страница 118 из 130
Добавлено: Пн ноя 28, 2016 22:01
Flasher
MVV писал(а):Я решил не добавлять функцию установки текста.
По-моему, ничего плохого в строчке в TCFS2.ini не было бы. К тому же полезность существенная.
MVV писал(а):Так что теперь текст можно ставить через них.
А как к ним findwnd приспособить?
И что насчёт установки фокуса?
Добавлено: Пн ноя 28, 2016 22:52
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.
И что насчёт установки фокуса?
Терпение, мой друг, терпение.

Добавлено: Пн ноя 28, 2016 23:59
Flasher
MVV писал(а):Команду в [Items], само собой, добавлю.
Лучше макрос.
MVV писал(а):Как-то так:
Давай на конкретном примере.
Код: Выделить всё
/ef "tcm(314,1) delay(500) sendmsg(findwnd(Edit), $0C, 0, `>блабла`)"
- так не хочет.
MVV писал(а):Терпение, мой друг, терпение.
ОК. Я подумал, что тоже не захотел.

Добавлено: Вт ноя 29, 2016 02:01
MVV
Не, findwnd(Edit) работать не будет - Edit не является окном верхнего уровня.
Если хочешь искать дочерние окна (контролы), обязательно нужно указывать родительское окно (диалоговое окно, модальное окно и т.д.), чтобы системе было понятно, где именно искать этот Edit.
В моём примере контрол TMyComboBox ищется внутри окна с классом TInpComboDlg (само собой, окно должно быть открыто).
Добавлено: Вт ноя 29, 2016 02:13
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))
Добавлено: Вт ноя 29, 2016 11:01
sa
MVV
У меня с 522 версией возникли непонятные эффекты. Например, отображаются не те, что надо элементы интерфейса при переходе в полноэкранный режим (по F11) и обратно, причём возврат в исходное состояние происходит не со второго, а с четвёртого нажатия.
Иначе, чем раньше, к примеру работает команда /ei kb1.
Добавлено: Вт ноя 29, 2016 11:12
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.
У меня она так же работает, как и раньше - показывает комстроку... Нужно больше деталей проблемы.
Добавлено: Вт ноя 29, 2016 11:21
sa
MVV
kb1 работает как переключатель показа кнопок функциональных клавиш (вкл/выкл/вкл....)
Добавлено: Вт ноя 29, 2016 13:28
MVV
Да,
kb1 показывает F-кнопки, я не туда посмотрел, причём работает нормально. Нужно ещё больше деталей.
Кстати, теперь можно выводить сообщения об ошибках и временные значения в заголовок окна!
Код: Выделить всё
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))
Добавлено: Вт ноя 29, 2016 13:53
sa
MVV
У меня команда kb1 работает как переключатель (вкл/выкл), kb0 не работает вовсе. Аналогично с sb, dt, dc.
Добавлено: Вт ноя 29, 2016 14:23
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...
Добавлено: Вт ноя 29, 2016 14:24
sa
С дефолтным пробовал. Редиректа [Layout] нет. Смущает, что как только копирую вместо 522 версии 512 всё работает как обычно.
Добавлено: Вт ноя 29, 2016 14:28
MVV
Исправил, попробуй новую:
TCFS2 Beta 524
Как раз и была проблема, когда не было редиректа. Спасибо за бдительность.

Добавлено: Вт ноя 29, 2016 14:39
sa
MVV писал(а):Исправил, попробуй новую
Ура! А то не знал, что и думать. С 524 версией такой проблемы нет.
Добавлено: Вт ноя 29, 2016 16:16
Flasher
MVV писал(а):Но и сам TMyComboBox вполне корректно обрабатывает WM_SETTEXT.
С этим уже определились. В примерах есть.
MVV писал(а):Первое, что бросается в глаза - условие findwnd(#2)+findwnd(#3). Оно проверяет, что существует хотя бы одно из окон (раз ты складываешь результаты).
И как исправить? С умножением вообще не срабатывает.
MVV писал(а):Если ты хочешь узнать, когда появится дочернее окно, чтобы задать ему текст, искать его для проверки надо так же, как и для отправки.
Можешь макросом? Не улавливаю. Я пробовал избавиться от дочернего окна, но становилось только хуже.
MVV писал(а):Если комбобокс редактируемый, ему прямо можно слать WM_SETTEXT, а если нет - надо слать другие сообщения (например, есть CB_SETCURSEL для выделения строки с заданным индексом, а также CB_FINDSTRING для поиска строки).
И как это сделать через TCFS2? Я привёл 2 примера, один из которых имеет редактируемый комбобокс. Хотелось бы конкретики.