Отлично, выкладывай.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
А где ты его видишь? Я его вижу только мельком при запуске TCFS2, потом он исчезает и во время выполнения команд уже не появляется. Пробовал на вышеупомянутых строках с delay, а также с fs2.Flasher писал(а):Спасибо. Хм. А я уж думал, что вообще теперь фонового курсора не увижу, а оказалось только для delay. Ну ладно, хоть так.
Это позволяет писать команды с опциональными параметрами. Например, пишешь функцию установки позиции сепаратора, которая ставит заданное значение, если параметр указан, или же сбрасывает на 50, если параметр не указан:Flasher писал(а):Это для ini-ключей что ли?MVV писал(а):+ функция null, позволяющая проверить, задан ли параметр команды
Код: Выделить всё
[Items]
setsep=run_item(set_separator, null(#1) ? 50 : #1-0)
TCFS2 /ei setsep(70)
TCFS2 /ei setsepТам же, где и ты, собственно. Или я что-то не так написал?MVV писал(а):А где ты его видишь?
Но как эти параметры могут пустовать?MVV писал(а):Или, быть может, какую-нибудь функцию установки размеров окна, где последние несколько параметров опциональны.
Ну ты как-то невнятно написал. Если у тебя он появляется лишь единожды на долю секунды при запуске, то ничего страшного в этом нет. Особенно при сравнении с тем, что было раньше.Flasher писал(а):Там же, где и ты, собственно. Или я что-то не так написал?MVV писал(а):А где ты его видишь?
При вызове команды ты можешь задать параметр или не задать - смотря как тебе надо. Опциональные параметры могут вычисляться автоматически, если не заданы явно - опять же, зависит от того, как составлена команда.Flasher писал(а):Но как эти параметры могут пустовать?MVV писал(а):Или, быть может, какую-нибудь функцию установки размеров окна, где последние несколько параметров опциональны.
Вот если ключ ini пустует, то это ещё понятно, для чего может пригодиться.
А что там невнятного? "Не увижу" - значит не увижу вообще. Страшного-то ничего нет, не несколько раздражает. Команды, завязынные на tcfs2, выполняются постоянно.MVV писал(а):Ну ты как-то невнятно написал. Если у тебя он появляется лишь на долю секунды при запуске, то ничего страшного в этом нет.
Кроме как с delay разницы практически не заметил.MVV писал(а):Особенно при сравнении с тем, что было раньше.
Ой, чую нужны примеры, торможу что-то...MVV писал(а):При вызове команды ты можешь задать параметр или не задать - смотря как тебе удобнее
Код: Выделить всё
[Items]
moveto=move(#1, #2, if(null(#3), cxWorkArea-#1, #3), if(null(#4), cyWorkArea-#2, #4))
moveto=move(#1, #2, null(#3) ? @-#1 : #3-0, null(#4) ? cyWorkArea-#2 : #4-0)
TCFS2 /ei "moveto(300, 400)"
TCFS2 /ei "moveto(300, 400, , 400)"
TCFS2 /ei "moveto(300, 400, 600, 400)"ask-rus писал(а):+ Косяк программы.
Да, работает не всегда. Но это не вина программы. После более внимательного взгляда на команду я нашёл в ней нарушение логики:Flasher писал(а):Команда должна сменять панели при первом нажатии кнопки, т.к. происходит проверка значения ключа. В одном случае ключ при несовпадении принимает значение 1, и выполняется юзеркоманда вызова дефолтного бара, в другом - ноль, и выполняется юзеркоманда вызова второго бара. Но почему-то команда срабатывает верно только со второго раза.TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"
Ничего в глаза не бросается? В первом случае установка бара #1 сопровождается записью Bar=1, во втором случае установка бара #2 сопровождается записью Bar=0, а в третьем ты ставишь бар #1, а в Bar ничего не пишешь. Естественно, при следующем запуске выполнение команды идёт по первой ветке, в которой она снова ставит бар #1, но уже сопровождая его записью Bar=1. Думаю, уже стало понятно, как решить проблему:Flasher писал(а):TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"
В предложенном мною варианте фигурировала отдельная команда set_bar, которая принимала номер бара и сама записывала этот номер в конфиг и одновременно вызывала соответствующую em-команду. С такой командой запись гораздо лаконичнее и понятнее, заодно и избавляет от проблем забывчивости:TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) set_tcini(TCFS2, Bar, 1) tem(em_1)"
Но это не решит проблему, связанную с тем, что панель переключается обратно через 5 секунд по той причине, что 10 секунд назад команда была вызвана и только-только закончила ожидание. Самый простой и безопасный способ решить проблему - различать сеансы:TCFS2.exe /ef "set_bar(1), test(tcini(TCFS2, Bar, #)!=1) | set_bar(2) delay(15000) set_bar(1)"
Ни за что не поверю в то, что это прям уж такая супер-пупер сложная запись, добавлено в ней всего-то ничего: запоминание номера сеанса @S (макрос пока недоступен) перед началом выполнения команды и проверка номера сеанса после ожидания (если изменился, значит, команду вызывали повторно). Если оформлять команду как команду, а не вызывать с командной строки, то нужно будет записывать номер сеанса в каждой ветке. Единственное условие здесь - не использовать один и тот же INI-параметр в разных командах.TCFS2.exe /ef "set_tcini(TCFS2, Cmd1, 0)" "set_bar(1), test(tcini(TCFS2, Bar, #)!=1) | set_bar(2) delay(15000) if(tcini(TCFS2, Cmd1, # == @S), set_bar(1))"
Собственно, я уже выражал своё мнение касаемо убийства процессов, и вижу более правильный вариант, который приведён выше.ask-rus писал(а):Необходима фича-убивашка, подробнее.
Правильно ли я понимаю, что когда при выполнении "tem(em_2) delay(15000) tem(em_1)" срабатывает последняя команда, возвращается флаг из первого куска "set_tcini(TCFS2, Bar, 1)", т.к. в памяти отложилось, что к команде tem(em_1) приклеилась установка данного флага, действующая на протяжении всей записи?MVV писал(а):После более внимательного взгляда на команду я нашёл в ней нарушение логики:Ничего в глаза не бросается? В первом случае установка бара #1 сопровождается записью Bar=1, во втором случае установка бара #2 сопровождается записью Bar=0, а в третьем ты ставишь бар #1, а в Bar ничего не пишешь. Естественно, при следующем запуске выполнение команды идёт по первой ветке, в которой она снова ставит бар #1, но уже сопровождая его записью Bar=1. Думаю, уже стало понятно, как решить проблему:Flasher писал(а):TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) set_tcini(TCFS2, Bar, 1) tem(em_1)"