Страница 49 из 130

Добавлено: Ср янв 18, 2012 09:45
MVV
Добавить нечего, всё действительно много раз обсуждалось в теме, описано в Readme и для сокрытия каждого стандартного элемента окна ТК уже есть готовые команды в TCFS2.ini.

Добавлено: Ср янв 18, 2012 10:38
Flasher
Добавить можно только то, что для сокрытия и вывода нужных оконных компонентов после предпоследней модификации актуально использовать именно TCFS2, так что тема выбрана верно. Более того, что важно, в TCFS2 есть макросы проверки значений ключей, чего нет в указанных Avada программах.

Добавлено: Вт янв 24, 2012 10:08
sa
Возник вопрос по использованию функции tem(<em_command_name>).
Например, в кнопке

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef  tcm(4001) tcm(540) tem(em_SrcByName) tcm(4002)
WCMICONS.DLL,5
Пассивная (левая) панель: Сортировать по имени


-1
применяется пользовательская команда em_SrcByName следующего вида

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

[em_SrcByName]
button=wcmicons.dll,5
cmd=cm_SrcByName
У меня при вызове кнопки с правой панели проскакивает периодически команда изменения сортировки для этой же панели, а не для пассивной (левой), как ожидалось. Лечить можно введением задержки после tem(em_SrcByName). Но можно ли обойтись без такого лечения и воспроизводится ли вообще у кого-нибудь такая ситуация?

PS
C утилитой TCMC такой проблемы не замечаю.

Добавлено: Вт янв 24, 2012 13:09
Flasher
sa, а для чего используется юзеркоманда? С ней у меня вообще всегда сортируется правая панель, а с tcm(321) - левая.

Добавлено: Вт янв 24, 2012 13:21
sa
Flasher писал(а):а для чего используется юзеркоманда?
Для сортировки активной панели по имени.

Добавлено: Вт янв 24, 2012 13:24
Flasher
Это не ответ. Для чего - это с каким умыслом отдаётся препочтение внутренней команде, запихнутой в пользовательскую вместо прямого использования.

Добавлено: Вт янв 24, 2012 13:33
sa
Flasher писал(а):Это не ответ.
Это просто пример для воспроизведения проблемной ситуации.

Добавлено: Вт янв 24, 2012 14:00
Flasher
Ясно, тогда жди MVV. Я уже ни раз с подобной ситуацией сталкивался в отношении других наборов команд (как и при использовании TCMC, который я использую теперь только для переходов).

Добавлено: Чт янв 26, 2012 10:17
MVV
Следует помнить, что официально тотал не поддерживает обработку последовательности команд с такой быстрой их подачей, и что только Гислеру известно, как именно тотал обрабатывает такую последовательность (да, по логике окно тотала должно обрабатывать сообщения последовательно, но кто знает, как оно на самом деле). Поэтому следует использовать задержку там, где без неё не работает, а с ней - работает.

Добавлено: Чт янв 26, 2012 10:30
sa
MVV
Если создать аналогичную команду в меню "Запуск" и вызывать её через tcm(701), например, то задержку тоже вводить не нужно…

И почему-то Delay(0) тоже зачастую помогает …

Добавлено: Чт янв 26, 2012 10:59
MVV
Раз на раз не приходится. Я видел немало мест, где магические задержки решали кучу проблем, которые иным путём было не решить.

К слову, delay(0) тоже добавляет некоторую задержку (вызов Sleep(0) не эквивалентен отсутствию вызова функции).

Добавлено: Чт янв 26, 2012 11:30
sa
MVV
Может, вставить задержку Sleep(0) после пользовательской команды внутри самой TCFS2?

Или сделать как в TCMC, где величину задержки можно задать глобально через командную строку.

Добавлено: Чт янв 26, 2012 12:24
Flasher
Из справки Хелпера:
Wait глобальное свойство, которое определяет, будут ли для
отсылки команд Тоталу использоваться функции PostMessage (по
умолчанию, Wait=False) или SendMessage (при установке значения
True). При истинном значении этого свойства всегда ожидается
реакция TC на посланную команду и только при получении результата
передается управление в скрипт. Это значит, что, вызвав некоторый
диалог TC при Wait=True, вы приостановите работу скрипта до того
момента, пока пользователь не внесет некоторые данные и сам не
закроет этот диалог. При Wait=False возможно _программное_
внесение данных в такое диалоговое окно последующими командами
скрипта и, соответсвенно, потребуется его программное закрытие. В
целом же для иных случаев использование установки Wait=True
должно по идее должно улучшить "надежность" выполнения команд,
посылаемых TC (тут надо еще поэкспериментировать).
SendCommand (строка с именем команды или ее номер[,Wait])
посылает стандартную команду окну TC. Обращение по именам
возможно только при загруженном файле INC (обычно загрузка
происходит автоматически при инициализации Helper-а). C помощью
необязательного параметра Wait можно переопределить параметр
ожидания (действует только для данной конкретной команды!).

Добавлено: Чт янв 26, 2012 12:49
MVV
Стандартных команд в TCFS2 не так и много, можно написать (и вызывать) их аналоги, например:

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

tcmd=eval(tcm(#1) + if(null(#2), 0, delay(#2)))
Второй необязательный параметр может принимать значение задержки после вызова команды:

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

TCFS2.exe /ei tcmd(304) tcmd(304,1000) tcmd(304,1000) tcmd(304,1000)

А для всех команд с непустым условием отката задержка есть и так.

Кстати, к сведению, tcm использует SendMessage.
Проверьте, будут ли глюки, если использовать msg($433, x, 0, 1) (послать внутреннюю команду через PostMessage) вместо tcm(x).

Добавлено: Чт янв 26, 2012 13:14
Flasher
Проверил с PostMessage. Если брать команды открытия диалога настроек, то при вызове с кнопки подсказка без текста замерзает. Ну, и вроде бы помедленней срабатывает.