View previous topic :: View next topic |
Author |
Message |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Sat Jul 25, 2020 08:57 Post subject: |
|
|
Вариант для TC 9.0+ с блокировкой перерисовки активного файлового списка (как в предыдущем сообщении, но без команды 2918 - Обновить выбранные эскизы, которая может сильно нагружать TC при выделении графических файлов): Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,sendmsg(msg($432,3),$0B,0)+tcm(2049)+tcm(2053)+tcm(2053) +varset(1,msg($432,1006+msg($432,1000)))+tcm(2054)+msg($433,2936,varget(1)-msg($432,1006+msg($432,1000)))+sendmsg(msg($432,3),$0B,1)+tcm(2017),tem(em_>Выделите_2_объекта!))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными | Поскольку обнаружил, что в этом варианте блокировки всё-таки требуется итоговая перерисовка списка, а универсальной команды (кроме redraw с передёргиванием всего окна TC) для этого пока не найдено, то в итоге от блокировки отказался, а здесь приведу ещё одну "заплатку" для рассматриваемого случая. Для перерисовки в код кнопки добавлена команда 2017- Копировать в буфер имена файлов, но она затрёт буфер обмена именами выделенных файлов...
Last edited by sa on Wed Jul 29, 2020 21:30; edited 1 time in total |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 25, 2020 11:54 Post subject: |
|
|
Quote: | как в предыдущем сообщении, но без команды 2918 | Для варианта с правильным сообщением это поправимо. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Mon Jul 27, 2020 17:50 Post subject: |
|
|
При остающемся неизменным алгоритме работы кнопки (перейти к первому выделенному объекту и выполнить команду "2936 Выделить файл под курсором, перейти к следующему" с параметром, равным разности запрошенных у TC номеров выделенных объектов), добавлю ещё один способ организации сообщения об ошибке – в заголовке, у меня там шрифт крупнее, чем в самом окне : Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,tcm(2049)+tcm(2053)+tcm(2053)+varset(1,msg($432,1006+msg($432,1000)))+tcm(2054) +msg($433,2936,varget(1)-msg($432,1006+msg($432,1000))),tem(`em_>Выделено:<`msg($432,1004+msg($432,1000))`>`)+eval(settext_wait(`Выделите 2 объекта!`,findwnd(`#32770`))))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными | Сообщение, у которого меняется заголовок, может быть заголовком сообщения о нереализованной функции, как например, для функции tem(`em_>…>`) в коде кнопки или для более коротких функций вроде tem(em_) и tcm(1,1). А может быть и заголовком сообщения какой-нибудь внутренней команды TC, например, "О программе" tcm(690,1) или "Подсчитать занимаемое место" tcm(530,1) – может пригодиться при выделении файлов в обычных папках. Для пробы любую из этих функций надо вставить вместо tem(`em_>…>`), перед +eval.
P.S.Пришлось снова отказаться от блокировки/разблокировки теперь уже активного файлового списка sendmsg(msg($432,3),$0B,0/1): после неё тоже требуется дополнительная перерисовка панели. Заметно в случае, когда выделение остаётся неизменным по составу объектов, хуже того, если при этом ещё и смещается на панели в другое место. Можно увидеть на примере кнопки из предыдущего сообщения.
Стандартный вариант с redraw() не нравится, команда 2918 и сдвоенные 2012 (или 330) имеют свои недостатки.
Last edited by sa on Tue Jul 28, 2020 16:38; edited 1 time in total |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jul 28, 2020 12:30 Post subject: |
|
|
Это всё, конечно, весело-забавно, не иначе как для топика "околокоммандерный ЮмАр". )
Но я лучше предложу что-то поинтересней с добавкой в свой код 3-х вн. команд, дабы не зависеть от числа 2 и не заморачиваться со случайным выделением в процессе выбора элементов:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef
if(msg(1074,msg(1074,1000)+1004)>1,sendmsg(msg(1074,3),$0B,0)+tcm(2057)+tcm(2054)+tcm(2053)+varset(1,msg(1074,1006+msg(1074,1000)))+tcm(2049)+tcm(2054)+tcm(2053)+tcm(2054)+msg(1075,2936,varget(1)-msg(1074,1006+msg(1074,1000)))+sendmsg(msg(1074,3),$0B,1),tcm(-1,1)+eval(settext_wait("` [✖] Ошибка! Выделите > 1 объекта!`",findwnd(Static,,findwnd(#32770)))))
wciconex.dll,46
Выделить всё в границах крайних выделенных объектов | Если курсор стоял выше последнего выделенного объекта, то для избежания артефактов обновление эскизов можно вызывать только в случае совпадения числа до и после выделения:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef
varset(1,msg(1074,msg(1074,1000)+1004)) if(varget(1)>1,sendmsg(msg(1074,3),$0B,0)+tcm(2057)+tcm(2054)+tcm(2053)+varset(2,msg(1074,1006+msg(1074,1000)))+tcm(2049)+tcm(2054)+tcm(2053)+tcm(2054)+msg(1075,2936,varget(2)-msg(1074,1006+msg(1074,1000)))+sendmsg(msg(1074,3),$0B,1)+if(varget(1)==msg(1074,msg(1074,1000)+1004),tcm(2918)),tcm(-1,1)+eval(settext_wait("` [✖] Ошибка! Выделите > 1 объекта!`",findwnd(Static,,findwnd(#32770)))))
wciconex.dll,46
Выделить всё в границах крайних выделенных объектов | Но понятно, что мало кому понадобиться выделять уже выделенное.  _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Fri Jul 31, 2020 17:13 Post subject: |
|
|
При так и остающемся неизменным алгоритме работы кнопки, ещё пара способов сообщения об ошибке. Первый - с командой cm_List, позволяющий использовать пробелы в строке внушительных размеров, с большим восклицательным знаком, подойдёт при работе в обычных папках:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,tcm(2054)+tcm(2053)+tcm(2053)+msg($433,2936,msg($432,1006+msg($432,1000))+ tcm(2054)-msg($432,1006+msg($432,1000))),tem(`cm_List Вместо `msg($432,1004+msg($432,1000))` выделите 2 объекта!`))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными | Второй - если требуется универсальное средство. MVV (автор TCFS2) предлагал на форуме в пользовательских командах тотала прописать утилиту, которая показывает окошки с сообщениями и выкладывал простейшую программку для этого, размером с килобайт. В файле usercmd.ini она может быть записана, например, так:
Quote: | [em_MsgBox]
cmd=%COMMANDER_PATH%\Addon\TCFS2\MessageBox.exe
param=%Z%A | Чтобы использовать её в кнопке, достаточно вместо cm_List указать em_MsgBox. |
|
Back to top |
|
 |
palle
Joined: 15 Apr 2021 Posts: 5
|
(Separately) Posted: Sun Apr 25, 2021 21:10 Post subject: |
|
|
Циклическое изменение размера эскизов.
Code: |
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\ADD\TC\TCFS2\TCFS2.exe
/ef "if(S_viewMode==269, if(eval(tcini(AllResolutions, TCFSThumbScaleFactor, #))==16, msg($0433, 2953, 32, 0) + set_tcini(AllResolutions, TCFSThumbScaleFactor, 32), if(eval(tcini(AllResolutions, TCFSThumbScaleFactor, #))==32, msg($0433, 2953, 49, 0) + set_tcini(AllResolutions, TCFSThumbScaleFactor, 49), if(eval(tcini(AllResolutions, TCFSThumbScaleFactor, #))==49, msg($0433, 2953, 100, 0) + set_tcini(AllResolutions, TCFSThumbScaleFactor, 100), if(eval(tcini(AllResolutions, TCFSThumbScaleFactor, #))==100, msg($0433, 2953, 16, 0) + set_tcini(AllResolutions, TCFSThumbScaleFactor, 16), msg($0433, 2953, 16, 0) + set_tcini(AllResolutions, TCFSThumbScaleFactor, 16))))), tcm(269))"
shell32.dll,96
Изменить размер эскизов|вкл. -> 16% -> 32% -> 49% -> 100%
-1
|
|
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Thu Dec 16, 2021 16:50 Post subject: |
|
|
На основе запроса. Кнопка с утилитой TCFS2.
Функции дополнительного модуля TCFS2Tools не используются.
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_cd, cmd, `cd`) set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_cd, param, `%A%Z`)"
/ei "swCD ( `|*\` , `*.*` )"
wcmicons.dll,24
Переключатель: только файлы ( ||*\ ) и все ( *.* ) | В файле TCFS2.ini, в секцию [Items] потребуется добавить строки:
Code: | swCD_L=set_style(# & ~$00000010) tem(`em_cd `#2), style(# & $00000010) | set_style(# | $00000010) tem(`em_cd `#1)
swCD_R=set_style(# & ~$00000020) tem(`em_cd `#2), style(# & $00000020) | set_style(# | $00000020) tem(`em_cd `#1)
swCD=run_item(swCD_R, #1, #2), eval(msg($432,1000)-1) | run_item(swCD_L, #1, #2) | Кнопка использует тоталовскую команду CD и может применяться для переключения между двумя вариантами фильтрации (по маскам файлов или сохранённым шаблонам поиска, перед именем шаблона требуется указание символа >), а также для попеременной смены каталога/архива или позиционируемого файла в панели (в сочетании с фильтрацией или без неё).
Варианты должны быть заключены в косые кавычки `` и записаны через запятую.
Если пользовательская команда em_cd в TC уже создана, то последовательность /ef “set _ini … `%A%Z`)" в кнопке можно убрать. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Thu Apr 27, 2023 14:41 Post subject: |
|
|
Кнопка на основе запроса.
Code: | TOTALCMD#BAR#DATA
cm_SelectAllBoth,em_MoveToParent,cm_GoToParent,cm_CountDirContent,cm_Delete
WCMICONS.DLL,63
Переместить ВСЕ ФАЙЛЫ и ПАПКИ на уровень вверх|и предложить удалить родительскую папку | Потребуется завести в usercmd.ini пользовательскую команду:
Code: | [em_MoveToParent]
cmd=MULTIRENAME==MoveToParent | а в инструменте группового переименования (Ctrl+M) в качестве маски для имени файла записать ..\[N] (оставив все остальные параметры по умолчанию) и сохранить шаблон (F2) с именем MoveToParent.
Версия TC 10.50 и свежее.
Если родительская папка не была удалена (или была воссоздана), то в ИГП работает функция отката для перемещённых объектов. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2533
|
(Separately) Posted: Thu Sep 28, 2023 15:19 Post subject: |
|
|
Кнопка для переименования файла/папки под курсором в инструменте группового переименования (ИГП).
В диалоге ИГП имя и расширение редактируются в отдельных полях, видны старое и новое имя, после переименования есть возможность отката (в том числе и после закрытия ИГП, но в рамках текущего сеанса работы TC).
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "tem(cm_ClearAll) varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000))) if(varget(1)<0, varset(1,2147483647)) tem(cm_Select) tem(`cm_GoToFirstEntry `varget(1)) tem(cm_ClearAllFiles) set_ini(`%%COMMANDER_PATH%%\usercmd.ini`, em_temp, cmd, `MULTIRENAME $tmp`) if(msg($432,1004+msg($432,1000)),set_tcini(Rename, $tmp_name, `%N`)+set_tcini(Rename, $tmp_ext)+tem(cm_ClearAllFolders), set_tcini(Rename, $tmp_name, `"%O"`)+set_tcini(Rename, $tmp_ext, `"%E"`)) set_tcini(Rename, $tmp_params, `0|1|1|1`) set_tcini(Rename, $tmp_search, `*\`) set_tcini(Rename, $tmp_replace) tem(em_temp)"
WCMICONS.DLL,46
Переименовать в ИГП файл/каталог под курсором
-1 | Требуется утилита TCFS2. Функции дополнительного модуля TCFS2Tools не используются.
Версия TC 9.0 и свежее. |
|
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
|