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

Добавлено: Пн июн 14, 2010 12:14
MVV
Команда: TCFS2.exe
Параметры: /u- fs2

Это я выше уже писал. Элементы, которые участвуют в операции:

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

[Items]
fs2=run_action(fs) save_undo(fs_undo), is_style(&$01000000) | run_action(fs_undo)

[Actions]
fs=db0 dc0 cd0 tt0 sb0 cl0 kb0 c0 rm1pm m1
fs_undo=
А разве одного примера с run_action мало? Главное чтобы принцип был понятен. А куда его применять - уже воля юзера. Вызов run_item делается точно так же, как и run_action, разница - передаешь имя команды, а не действия. Но если так хочется пример:

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

[Items]
c2=set_style(^$00C00000) run_item(rm1pm), , c2
rm1pm=move(, , +1, ) move(, , +-1, ), , rm1pm
Т.е., часть команд просто выносится в другую команду - для упрощения или для условного выполнения. Иногда можно просто вручную вызвать обе команды последовательно. Но если нужно вызвать одну команду в одной части условия, а другую - в другой, то только так.

Добавлено: Пн июн 14, 2010 12:57
Flasher
MVV писал(а):Команда: TCFS2.exe
Параметры: /u- fs2
Да, я что-то я прошляпил этот момент, сейчас вижу. Только не понятно было что c fs_undo делать. В справке бы все эти нюансы описать не помешало.
MVV писал(а):Т.е., часть команд просто выносится в другую команду - для упрощения или для условного выполнения. .. Но если нужно вызвать одну команду в одной части условия, а другую - в другой, то только так.
Так, стоп, тут понятным языком, пожалуйста. Что значит условное выполнение? О каких условиях речь? Где они в приложенном примере? Где тут if, else, elseif и т.п.? Я тупой, мне разжевать надо.

Добавлено: Пн июн 14, 2010 13:35
MVV
Flasher писал(а):
MVV писал(а):Команда: TCFS2.exe
Параметры: /u- fs2
Да, я что-то я прошляпил этот момент, сейчас вижу. Только не понятно было что c fs_undo делать. В справке бы все эти нюансы описать не помешало.
Возможно существует шанс на существование некоторой отличной от нуля вероятности того, что в некоторой степени ты можешь в чем-то даже оказаться правым. :)
Flasher писал(а):
MVV писал(а):Т.е., часть команд просто выносится в другую команду - для упрощения или для условного выполнения. .. Но если нужно вызвать одну команду в одной части условия, а другую - в другой, то только так.
Так, стоп, тут понятным языком, пожалуйста. Что значит условное выполнение? О каких условиях речь? Где они в приложенном примере? Где тут if, else, elseif и т.п.? Я тупой, мне разжевать надо.
Открываем readme.txt и читаем несчастных два килобайта текста (еще там кило истории и пара кило английского текста :)):
В первой секции прописываются команды, содержащие один или несколько вызовов функций для выполнения (разделенные пробелами), необязательное условие необходимости выполнения функции (функция выполняется, если условие ложно), а также необязательную строку отката, которая будет дописана к действию отката при успешном выполнении команды (то есть, если после вызова функции условие станет истинным).
Изначально условие задумывалось для корректной отмены действия, но его очень можно использовать для условного выполнения тех или иных команд и функций.
В предыдущем моем посте при вызове команды fs2 программа проверит наличие флага $01000000 в стилях окна (развернутость окна) и, если не развернуто, вызовет действие fs, а если развернуто - то не будет вызовет, а перейдет к команде, указанной после знака '|', где указана безусловная команда, которая и будет выполнена. :wink:

Добавлено: Пн июн 14, 2010 14:49
Flasher
MVV писал(а):но его очень можно использовать для условного выполнения тех или иных команд и функций.
Под условным нужно понимать то, которое имеет условие, а не как я подумал в дань просторечию, "воображаемое", "не берущееся в расклад"?
MVV писал(а):В предыдущем моем посте при вызове команды fs2 программа проверит наличие флага $01000000 в стилях окна (развернутость окна) и, если не развернуто, вызовет действие fs, а если развернуто - то не будет вызовет, а перейдет к команде, указанной после знака '|', где указана безусловная команда, которая и будет выполнена.
Теперь ясно. Только флаг меня этот никак не устраивает. Пишу туда свой >> is_style(&$00C00000) , но почему-то реверса при повторном вызове не происходит, только скрываются перечисленные в fs панели. Что я забыл учесть?

Добавлено: Пн июн 14, 2010 14:55
MVV
Под условным нужно понимать то, которое имеет условие, а не как я подумал в дань просторечию, "воображаемое", "не берущееся в расклад"?
Да, понимать как антоним "безусловного".
Только флаг меня этот никак не устраивает. Пишу туда свой >> is_style(&$00C00000) , но почему-то реверса при повторном вызове не происходит, только скрываются перечисленные в fs панели. Что я забыл учесть?
А чем не устраивает? Тем, что окно и так развернуто? Попробуй так:

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

[Items] 
fs2=run_action(fs) save_undo(fs_undo), is_style(!&$00C00000) | run_action(fs_undo)
То есть, в результате выполнения команды заголовок должен исчезнуть, то есть, условие is_style(!&$00C00000) - стать истинным. И при повторном запуске команды действие fs вызываться не будет, так как условие уже выполняется.

Сам путаюсь иногда, так как условие было для другого. А так приходится его инвертировать. Если бы условие было для выполнения, его следовало бы расположить перед командой, и выполнять команду, если оно истинно (но тогда условие или голую запятую пришлось бы писать всегда).

Добавлено: Пн июн 14, 2010 15:11
Flasher
MVV писал(а):А чем не устраивает? Тем, что окно и так развернуто?
В развёрнутом не срабатывает.
MVV писал(а):И при повторном запуске команды действие fs вызываться не будет, так как условие уже выполняется.
Зачем тогда весь этот мопед, если реверса происходить не будет? Мне нужен реверс!! :)

Добавлено: Пн июн 14, 2010 15:18
MVV
Flasher писал(а):
MVV писал(а):А чем не устраивает? Тем, что окно и так развернуто?
В развёрнутом не срабатывает.
Ну, я это и имел в виду.
MVV писал(а):И при повторном запуске команды действие fs вызываться не будет, так как условие уже выполняется.
Зачем тогда весь этот мопед, если реверса происходить не будет? Мне нужен реверс!! :)[/quote]
Да реверс будет в том, что при выполнении действия fs его команды составят строку отката, которая будет записана в fs_undo и запущена при повторном вызове - то есть, отменятся только те изменения, которые были внесены первым запуском fs2 (а не все перечисленные в fs). Ради чего всё и затевалось.

Добавлено: Пн июн 14, 2010 15:47
Flasher
MVV
Да я это уже понял давно. Ну не работает у меня реверс, и всё тут. :(
Мне нужно организовать полный откат. При первом нажатии - убрались все кроме вкладок, при повторном всё вернулось, как было.
Кстати, а можно сделать так?: перечислено несколько компонентов интерфейса; условие: если любой из этих компонентов присутствует, то все их скрыть, если любой из них отсутствует, то все их показать. Если же случится так, что будет одновременное присутствие одного из перечисленных компонентов и отсутствие другого, то событие, соответственно, должно игнорироваться.

Добавлено: Пн июн 14, 2010 16:17
MVV
Flasher писал(а):Да я это уже понял давно. Ну не работает у меня реверс, и всё тут. :(
Странно... Создал команду:

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

[Items]
fs3=run_action(fs) save_undo(fs3_undo), is_style(!&$00C00000) | run_action(fs3_undo)
Запустил два раза:

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

TCFS2.exe /u- /ei fs3
На первый запуск выполнилась моя fs, тотал перешел в полный экран, оставив только панель инструментов и вкладки (моя fs их не убирает специально), на второй - все вернулось назад. Работает как из развернутого на весь экран тотала, так и из нормального.
Flasher писал(а):Мне нужно организовать полный откат. При первом нажатии - убрались все кроме вкладок, при повторном всё вернулось, как было.
Кстати, а можно сделать так?: перечисленно несколько компонентов интерфейса; условие: если любой из этих компонентов присутствует, то все их скрыть, если любой из них отсутствует, то все их показать.
Описываю, как сделать так: если все элементы включены, все выключить, иначе - все включить.
Проверять будем так: если первый выключен, все включаем, иначе если второй выключен, все включаем, иначе если третий выключен, все включаем, ..., иначе (то есть, все включены) все выключаем. При этом не забываем инвертировать условия. Нам подойдут готовые условия из включающих команд (так как там такая же логика, но для одного элемента). Откат нам построят сами команды включения/выключения, поэтому с ним не заморачиваемся. Да и не нужен он нам с такой командой.

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

[Items]
flasher_fs=run_action(my_controls_show), tcini(Layout, DriveBar1, 1) | run_action(my_controls_show), tcini(Layout, TabHeader, 1) | run_action(my_controls_show), tcini(Layout, CmdLine, 1) | ... | run_action(my_controls_hide)

[Actions]
my_controls_show=db1 tt1 cl1 kb1 c1 rm1pm ; и еще что угодно
my_controls_hide=db0 tt0 cl0 kb0 c0 rm1pm ; и еще что угодно
Надеюсь, логику поймешь и допишешь нужные элементы. :)
Проверяемые элементы и включаемые/выключаемые абсолютно не связаны, могут быть любыми. Запускать:

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

TCFS2.exe /u- /ei flasher_fs
(то есть, запуск команды flasher_fs без сохранения действия undo при выходе)

Добавлено: Пн июн 14, 2010 19:15
Flasher
MVV
Только освободился. Пардон. Вот теперь другое дело, оба варианта рабочие, правда не без тормозов, но всё равно уже что-то, спасибо! :)

Добавлено: Пн июн 14, 2010 20:26
MVV
Задержку уменьши параметром /d - по умолчанию она равна 50 мс - это на ожидание проверки условия после выполнения команды, у которой оно задано - тебе здесь задержка не очень нужна, команда реверсивная, откат не использует. Больше не представляю, где могут быть тормоза.

Добавлено: Вт июн 15, 2010 17:50
Flasher
MVV
Поставил /d0, скрытие происходит почти незаметно, а вот появление немного затяжное. С этим никак?

Добавлено: Вт июн 15, 2010 17:55
MVV
Ну... значит это ТК тупит при отображении элементов. Похоже, он убивает окна при скрытии - значит, приходится создавать их с нуля при отображении, а это дольше. В общем, или так, или никак. :wink:

В моем коде разницы по производительности между алгоритмами отображения и скрытия нет, вызываются те же функции (единственное различие для твоей задачи - что необходимость скрытия нужно дольше детектить, так как приходится проверить все условия в строке - но тогда скрытие должно быть дольше, вернее, подготовка к скрытию :)).


Кстати, уже можно писать плагин, скрывающий меню - бета-версия Autorun.wdx с поддержкой загрузки библиотек уже вышла:)

Добавлено: Вт июн 15, 2010 18:34
Flasher
MVV писал(а):но тогда скрытие должно быть дольше, вернее, подготовка к скрытию
Хм.. Короче ситуация свелась к парадоксу. Меня и это гораздо больше устраивает, чем то, что было либо вообще ничего, так что всё в норме. :wink:
MVV писал(а):Кстати, уже можно писать плагин, скрывающий меню - бета-версия Autorun.wdx с поддержкой загрузки библиотек уже вышла :)
Это я вчера ещё заметил. Ок. Жду новой фичи! Вперёд! Изображение

Добавлено: Ср июн 16, 2010 13:57
MVV
TCFS2 1.3 на wincmd.ru

Из основных изменений - команды теперь выполняются, если их условия истинны, а не ложны, так как в старом варианте приходилось ломать голову при их составлении, теперь все просто:

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

m0=show(9), is_style(&$01000000), m1 ; выполнить show(9), если is_style(&$01000000)
Ну и конечно подробный Readme.txt!