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

Добавлено: Ср авг 31, 2011 16:00
ask-rus
MVV
В нетерпении заждался. Как успехи с новым макросом? Подарком ко Дню знаний?

Добавлено: Ср авг 31, 2011 18:18
MVV
TCFS2 2.0.3.264:
+ псевдо-макрос @sid, возвращающий уникальный идентификатор для каждой запущенной копии TCFS2

Отлаженный пример использования для переключения между панелями инструментов приведён в секции 1.2 файла Readme.

Добавлено: Чт сен 01, 2011 20:54
ask-rus
Неожиданная проблема в четыре действия:

1. Переключаюсь с главной на расширенную панель инструментов;
2. Не дожидаясь 15-секундного возврата на главную, перехожу в фуллскрин (нет панели инструментов);
3. Наконец, 15 секунд проходит и панель срабатывает в фуллскрине;
4. Выходим из фуллскрина и панели инструментов не наблюдаем.

Проблемным является третий пункт, не хотелось бы, чтобы панель инструментов выскакивала в фуллскрине. Задать дополнительное условие автоматической переключалке?

Добавлено: Чт сен 01, 2011 23:15
MVV
Сбрасывай идентификатор сеанса для команды quick_bar при переключении в полный экран: set_tcini(TCFS2, quick_bar, 0). Тогда по истечении 15 секунд команда не будет переключать панель инструментов обратно.

Осенило меня, почему при возврате в оконный режим панель выключается. Команда OPENBAR же не пишет в конфиг, что включила панель. Чтобы избежать и этого глюка, можно расширить команду set_bar, сделав, чтобы она вызывала tb1; также можно добавить "нулевую" панель - выключение панели инструментов. Итак, немного извратимся, чтобы не писать вызов tb1 в каждом блоке:

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

set_bar=set_tcini(TCFS2, Bar, 0) run_item(tb0), if(#1 == 0, 1, run_item(tb1)*0) | set_tcini(TCFS2, Bar, 1) tem(em_bar1), test(#1 == 1) | set_tcini(TCFS2, Bar, 2) tem(em_bar2), test(#1 == 2)
Добавился нулевой блок, который выключает панель, а также условие нулевого блока, которое принудительно включает панель, если номер панели ненулевой, при этом стоит домножить результат вызова на 0, чтобы значение не повлияло на выбор блока.

Что-то пока не работает... но идея должна быть понятна.
А не, работает, просто забыл закомментировать команду set_bar, описанную парой строчек выше. :D

Правда, можно заметить переключение панели. Вот два варианта команды set_bar, избавленные от этих недостатков:

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

set_bar=if(#1 == 1, tem(em_bar1), if(#1 == 2, tem(em_bar2))) if(#1 > 0, set_tcini(Layout, ButtonBar, 1), run_item(tb0)) set_tcini(TCFS2, Bar, #1)
set_bar=if(#1 == 1, tem(em_bar1)) if(#1 == 2, tem(em_bar2)) if(#1 > 0, set_tcini(Layout, ButtonBar, 1), run_item(tb0)) set_tcini(TCFS2, Bar, #1)
Делают оба одно и то же. Вначале включают нужную панель, если нужно. Затем либо вызывают tb0, если параметр нулевой, или же пишут в конфиг, что панель включена. И сохраняют номер панели. Разница лишь в том, что в первом вызовы if вложенные, что позволяет отсечь проверку остальных значений, когда найдено нужное. Зато второй вариант куда легче читается при большом числе панелей.

Добавлено: Пт сен 02, 2011 17:21
ask-rus
set_bar у себя поправил, а вот с
MVV писал(а):Сбрасывай идентификатор сеанса для команды quick_bar при переключении в полный экран: set_tcini(TCFS2, quick_bar, 0). Тогда по истечении 15 секунд команда не будет переключать панель инструментов обратно.
не совсем понятно.
Имею переключалку панелей:

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

quick_bar=set_tcini(TCFS2, #0, 0) run_item(set_bar, 1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, #0, @sid) run_item(set_bar, 2) delay(10000) if(tcini(TCFS2, #0, # == @sid), run_item(set_bar, 1))
Как быть дальше?

Добавлено: Пт сен 02, 2011 20:55
MVV
Блин. :)
Команду quick_bar не трогай, она уже способна понять твои запросы. :D
В действие, которое переводит в полноэкранный режим, добавь вызов команды, в которой будет set_tcini(TCFS2, quick_bar, 0). Так ты сообщишь той копии TCFS2, которая дремлет, что при пробуждении панель включать не надо (ID сеанса не совпадёт) - точно так же делает и сама quick_bar. :wink: Названий действий и команд не привожу, т.к. ты сам их не указал. По дефолту тебе надо добавить эту строчку в начало команды fs2.

Добавлено: Пт сен 02, 2011 21:07
ask-rus
MVV писал(а):По дефолту тебе надо добавить эту строчку в начало команды fs2.

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

TCFS2.exe /u- /ei fs2

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

fs2=set_tcini(TCFS2, quick_bar, 0) fs2
Не помогает... Что делаю не так?

Добавлено: Пт сен 02, 2011 22:23
MVV
Всё не так. :)
Ты добавляешь в действие. А надо в команду, которую вызывает это действие. Из действий нельзя вызывать функции.

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

fs2=set_tcini(TCFS2, quick_bar, 0) run_action(fs) save_undo(fs_undo), style(# & $00C00000) | set_tcini(TCFS2, quick_bar, 0) run_action(fs_undo)
Или же можно прямо в командную строку, не забыв указать режим /ef:

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

TCFS2 /ef "set_tcini(TCFS2, quick_bar, 0)" /ei fs2

Добавлено: Пт сен 02, 2011 22:48
ask-rus
После выхода из фуллскрина с применением этой заглушки

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

TCFS2 /ef "set_tcini(TCFS2, quick_bar, 0)" /ei fs2
переключить панель удается только со второго раза, нехорошо.

Добавлено: Пт сен 02, 2011 23:54
MVV
Переключить чем? И куда? У меня при возврате в оконный режим панель включается сама.

Ага, понял. Проблема в том, что при переключении панели с помощью tb0/tb1 тотал сбрасывает панель на стандартную, в то время как параметр [TCFS2] Bar сохраняет значение 2 (если переходить в полный экран при активной 2 панели).

Как вариант, можешь модифицировать команду tb0:

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

tb0=tcm(2901) set_tcini(TCFS2, Bar, 0), test(hasButtonBar), tb1
Тогда реальный номер панели будет соответствовать записанному в параметре [TCFS2] Bar, и всё будет работать.

Добавлено: Сб сен 03, 2011 10:58
ask-rus
MVV писал(а):Переключить чем? И куда? У меня при возврате в оконный режим панель включается сама.
1. Переключаюсь с главной на расширенную панель инструментов;
2. Не дожидаясь 15-секундного возврата на главную, перехожу в фуллскрин (нет панели инструментов);
3. Возвращаюсь в оконный режим (главная панель инструментов);
4. Пытаюсь переключиться на расширенную с первого раза.

Проблемный четвертый пункт - только со второго раза переключение.
MVV писал(а):и всё будет работать.
Не знаю, не работает.

Добавлено: Сб сен 03, 2011 13:11
MVV
Точно, не работает. Команда quick_bar же проверяет номер на 1, а не на 0. Тогда модифицировать quick_bar:

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

set_tcini(TCFS2, #0, 0) run_item(set_bar, 1), test(tcini(TCFS2, Bar, #)==2) | set_tcini(TCFS2, #0, @sid) run_item(set_bar, 2) delay(5000) if(tcini(TCFS2, #0, # == @sid), run_item(set_bar, 1))
Я просто чуть поправил условие. Теперь вторая панель включается всегда, когда текущий номер панели не равен 2 - т.е. и из нулевой, и из первой.

Также можно заменить tb0 в действии fs (действие fs2 вызывает fs) на set_bar(0), чтобы не модифицировать саму tb0:

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

[Actions]
fs=db0 dc0 set_bar(0) cd0 cl0 kb0 c0 rm1pm m1

Добавлено: Сб сен 03, 2011 14:18
ask-rus
MVV писал(а):Теперь вторая панель включается всегда, когда текущий номер панели не равен 2 - т.е. и из нулевой, и из первой.
Если я в фуллскрине вызову переключалку панелей, то сначала увижу 2-ю, которая затем сменится на 1-ю. Ну да, подойдет так, спасибо.

Добавлено: Сб сен 03, 2011 16:04
MVV
Можешь написать так:

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

fs=db0 dc0 set_bar(1) tb0 cd0 cl0 kb0 c0 rm1pm m1
Тогда и в фуллскрине будет нормально.

Или можешь добавить действие отката для set_bar:

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

set_bar=if(#1 == 1, tem(em_bar1)) if(#1 == 2, tem(em_bar2)) if(#1 > 0, set_tcini(Layout, ButtonBar, 1), run_item(tb0)) set_tcini(TCFS2, Bar, #1), , set_bar(1)
Тогда при выходе из фуллскрина будет вызываться действие отката set_bar(1), которое будет включать основная панель и писать её номер в [TCFS2] Bar. И можно будет вернуть оригинальный вариант quick_bar, включающий в полноэкранном режиме основную панель, если панель выключена.

Кстати, как вариант, добавление set_tcini(TCFS2, Bar, 1) в tb1 тоже решило бы проблему открытия второй панели только на второй раз при выходе из фуллскрина.

В общем, вариантов масса. Главное - составить для себя чёткий алгоритм, продумать все варианты исходов в зависимости от начальных условий. И описать его.

Добавлено: Сб сен 03, 2011 16:43
ask-rus
Я сейчас колеблюсь над тем, чтобы совсем исключить вызов панели инструментов в фуллскрине. Главный аргумент - некрасиво (кнопки не по центру). А что, если переключалка панелей в фуллскрине будет осуществлять выход из фуллскрина? Логика следующая - переключалкой панелей инструментов в фуллскрине я желаю увидеть одну из этих панелей, но панель инструментов в фуллскрине смотрится некрасиво, таким образом, выход из фуллскрина даст мне желаемую возможность увидеть одну из панелей в красивом исполнении.

P.s. Многочисленные повторения в постах совершаю намеренно для доступности понимания.