View previous topic :: View next topic |
Author |
Message |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Aug 23, 2011 23:25 Post subject: |
|
|
MVV
Отлично, выкладывай.  |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Aug 24, 2011 00:11 Post subject: |
|
|
Спасибо. Хм. А я уж думал, что вообще теперь фонового курсора не увижу, а оказалось только для delay. Ну ладно, хоть так.
MVV wrote: | + функция null, позволяющая проверить, задан ли параметр команды | Это для ini-ключей что ли? |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Wed Aug 24, 2011 09:48 Post subject: |
|
|
Flasher wrote: | Спасибо. Хм. А я уж думал, что вообще теперь фонового курсора не увижу, а оказалось только для delay. Ну ладно, хоть так. |
А где ты его видишь? Я его вижу только мельком при запуске TCFS2, потом он исчезает и во время выполнения команд уже не появляется. Пробовал на вышеупомянутых строках с delay, а также с fs2.
Flasher wrote: | MVV wrote: | + функция null, позволяющая проверить, задан ли параметр команды | Это для ini-ключей что ли? |
Это позволяет писать команды с опциональными параметрами. Например, пишешь функцию установки позиции сепаратора, которая ставит заданное значение, если параметр указан, или же сбрасывает на 50, если параметр не указан: Code: | [Items]
setsep=run_item(set_separator, null(#1) ? 50 : #1-0)
TCFS2 /ei setsep(70)
TCFS2 /ei setsep |
Или, быть может, какую-нибудь функцию установки размеров окна, где последние несколько параметров опциональны. Иногда может быть полезно. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Last edited by MVV on Fri Aug 26, 2011 15:12; edited 1 time in total |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Aug 24, 2011 23:08 Post subject: |
|
|
MVV wrote: | А где ты его видишь? | Там же, где и ты, собственно. Или я что-то не так написал?
MVV wrote: | Или, быть может, какую-нибудь функцию установки размеров окна, где последние несколько параметров опциональны. | Но как эти параметры могут пустовать?
Вот если ключ ini пустует, то это ещё понятно, для чего может пригодиться. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Thu Aug 25, 2011 00:51 Post subject: |
|
|
Flasher wrote: | MVV wrote: | А где ты его видишь? | Там же, где и ты, собственно. Или я что-то не так написал? |
Ну ты как-то невнятно написал. Если у тебя он появляется лишь единожды на долю секунды при запуске, то ничего страшного в этом нет. Особенно при сравнении с тем, что было раньше.
Flasher wrote: | MVV wrote: | Или, быть может, какую-нибудь функцию установки размеров окна, где последние несколько параметров опциональны. | Но как эти параметры могут пустовать?
Вот если ключ ini пустует, то это ещё понятно, для чего может пригодиться. |
При вызове команды ты можешь задать параметр или не задать - смотря как тебе надо. Опциональные параметры могут вычисляться автоматически, если не заданы явно - опять же, зависит от того, как составлена команда. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Aug 25, 2011 00:59 Post subject: |
|
|
MVV wrote: | Ну ты как-то невнятно написал. Если у тебя он появляется лишь на долю секунды при запуске, то ничего страшного в этом нет. | А что там невнятного? "Не увижу" - значит не увижу вообще. Страшного-то ничего нет, не несколько раздражает. Команды, завязынные на tcfs2, выполняются постоянно.
MVV wrote: | Особенно при сравнении с тем, что было раньше. | Кроме как с delay разницы практически не заметил.
MVV wrote: | При вызове команды ты можешь задать параметр или не задать - смотря как тебе удобнее | Ой, чую нужны примеры, торможу что-то... |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Thu Aug 25, 2011 09:49 Post subject: |
|
|
Не увижу вообще - это из области фантастики. Винда ещё до передачи управления приложению (любому - проверил на нескольких, включая стандартные виндовские калькулятор и блокнот) ставит курсор занятости, и убрать его вообще можно только тем способом, который ты предлагал в соседней теме (через настройку курсоров ).
А пример был четырьмя постами выше - функция setsep с опциональным параметром. Можно такой пример привести: Code: | [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)" |
Если третий или четвертый параметр задан, размер окна ставится в соответствии с указанным параметром, иначе - максимальный возможный при таких координатах окна. Я не сильно настаиваю на том, что это будет очень полезно, но возможно где-то пригодится.
Оба варианта записи команды делают одно и то же, но выражения оператора ?: не могут быть пустыми, т.к. при его вычислении вычисляются оба. Значение выражения #3-0 совпадает со значением #3, если #3 задан, и является верным выражением, если #3 пуст (-0 - это верное выражение, хоть и бессмысленное). И ещё раз напомню, что @ внутри параметра вложенной функции не раскрывается, поэтому вместо cxWorkArea нельзя использовать @. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
ask-rus

Joined: 10 Nov 2009 Posts: 2077 Location: Russian Federation
|
(Separately) Posted: Sat Aug 27, 2011 19:04 Post subject: |
|
|
MVV
Необходима фича-убивашка, подробнее.
Добавлено спустя 1 час 8 минут:
+ Косяк программы. _________________ «Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Sun Aug 28, 2011 02:04 Post subject: |
|
|
Flasher wrote: | Quote: | 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, и выполняется юзеркоманда вызова дефолтного бара, в другом - ноль, и выполняется юзеркоманда вызова второго бара. Но почему-то команда срабатывает верно только со второго раза. |
Да, работает не всегда. Но это не вина программы. После более внимательного взгляда на команду я нашёл в ней нарушение логики:
Flasher wrote: | 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. Думаю, уже стало понятно, как решить проблему:
Quote: | 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)" |
В предложенном мною варианте фигурировала отдельная команда set_bar, которая принимала номер бара и сама записывала этот номер в конфиг и одновременно вызывала соответствующую em-команду. С такой командой запись гораздо лаконичнее и понятнее, заодно и избавляет от проблем забывчивости:
Quote: | TCFS2.exe /ef "set_bar(1), test(tcini(TCFS2, Bar, #)!=1) | set_bar(2) delay(15000) set_bar(1)" |
Но это не решит проблему, связанную с тем, что панель переключается обратно через 5 секунд по той причине, что 10 секунд назад команда была вызвана и только-только закончила ожидание. Самый простой и безопасный способ решить проблему - различать сеансы:
Quote: | 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))" |
Ни за что не поверю в то, что это прям уж такая супер-пупер сложная запись, добавлено в ней всего-то ничего: запоминание номера сеанса @S (макрос пока недоступен) перед началом выполнения команды и проверка номера сеанса после ожидания (если изменился, значит, команду вызывали повторно). Если оформлять команду как команду, а не вызывать с командной строки, то нужно будет записывать номер сеанса в каждой ветке. Единственное условие здесь - не использовать один и тот же INI-параметр в разных командах.
ask-rus wrote: | Необходима фича-убивашка, подробнее. |
Собственно, я уже выражал своё мнение касаемо убийства процессов, и вижу более правильный вариант, который приведён выше. |
|
Back to top |
|
 |
ask-rus

Joined: 10 Nov 2009 Posts: 2077 Location: Russian Federation
|
(Separately) Posted: Sun Aug 28, 2011 09:00 Post subject: |
|
|
MVV wrote: | макрос пока недоступен |
Ну что ж, ждать только остается... _________________ «Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 28, 2011 20:58 Post subject: |
|
|
MVV wrote: | После более внимательного взгляда на команду я нашёл в ней нарушение логики:
Flasher wrote: | 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. Думаю, уже стало понятно, как решить проблему:
Quote: | 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)" |
| Правильно ли я понимаю, что когда при выполнении "tem(em_2) delay(15000) tem(em_1)" срабатывает последняя команда, возвращается флаг из первого куска "set_tcini(TCFS2, Bar, 1)", т.к. в памяти отложилось, что к команде tem(em_1) приклеилась установка данного флага, действующая на протяжении всей записи? |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 28, 2011 21:05 Post subject: |
|
|
Тогда я не вижу нарушения логики в своей записи. При возврате в дефолтную панель происходит установка в ноль. При последующем обращении происходит проверка на значения, отличные от единицы, и, соответственно, команда должна выполняться, а этого не происходит. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Sun Aug 28, 2011 21:20 Post subject: |
|
|
Ну как же не видишь? Ты переключаешь панель на основную, а параметр, обозначающий текущую панель, не меняешь. В результате при следующем запуске выполнение команды идёт по другой ветке, в которой снова ставится эта панель, которая и так стоит. Это и есть лишний запуск. И он как раз и делает, что записывает в Bar тот номер, который должна была записать команда при последнем вызове tem(em_1).
Твой оригинальный вариант без !=1 работал исключительно потому, что он из-за этого всегда выполнял вторую ветку, а первая не выполнялась никогда (если не ноль, мы запишем единичку, иначе ноль - при следующем запуске будет такое же условие). Впрочем, если записать вручную Bar=1, то вариант без !=1 будет всегда выполнять первую ветку, никогда не попадая во вторую. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|