Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Обмен кнопками
Goto page Previous  1, 2, 3 ... 43, 44, 45
 
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы printer-friendly view
View previous topic :: View next topic  
Author Message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Sat Jul 25, 2020 08:57    Post subject: Reply with quote

Вариант для 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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jul 25, 2020 11:54    Post subject: Reply with quote

Quote:
как в предыдущем сообщении, но без команды 2918
Для варианта с правильным сообщением это поправимо.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Mon Jul 27, 2020 17:50    Post subject: Reply with quote

При остающемся неизменным алгоритме работы кнопки (перейти к первому выделенному объекту и выполнить команду "2936 Выделить файл под курсором, перейти к следующему" с параметром, равным разности запрошенных у TC номеров выделенных объектов), добавлю ещё один способ организации сообщения об ошибке – в заголовке, у меня там шрифт крупнее, чем в самом окне Smile :
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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jul 28, 2020 12:30    Post subject: Reply with quote

Это всё, конечно, весело-забавно, не иначе как для топика "околокоммандерный ЮмАр". )
Но я лучше предложу что-то поинтересней с добавкой в свой код 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
Выделить всё в границах крайних выделенных объектов
Но понятно, что мало кому понадобиться выделять уже выделенное. Wink
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Fri Jul 31, 2020 17:13    Post subject: Reply with quote

При так и остающемся неизменным алгоритме работы кнопки, ещё пара способов сообщения об ошибке. Первый - с командой 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
View user's profile Send private message
palle



Joined: 15 Apr 2021
Posts: 5

Post (Separately) Posted: Sun Apr 25, 2021 21:10    Post subject: Reply with quote

Циклическое изменение размера эскизов.

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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Thu Dec 16, 2021 16:50    Post subject: Reply with quote

На основе запроса. Кнопка с утилитой 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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Thu Apr 27, 2023 14:41    Post subject: Reply with quote

Кнопка на основе запроса.
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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2561

Post (Separately) Posted: Thu Sep 28, 2023 15:19    Post subject: Reply with quote

Кнопка для переименования файла/папки под курсором в инструменте группового переименования (ИГП).
В диалоге ИГП имя и расширение редактируются в отдельных полях, видны старое и новое имя, после переименования есть возможность отката (в том числе и после закрытия ИГП, но в рамках текущего сеанса работы 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
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 99

Post (Separately) Posted: Sat Feb 24, 2024 13:08    Post subject: Reply with quote

Довольно простой, но эффективный способ переключения иконки на панели инструментов (для любой кнопки) при помощи плагина Autorun и TCFS2.

Пример для команды 2957.
Code:

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
/ef "msg($0B, 0, 0) tcm(2957) msg(regmsg(ColorMessage), 0, 0) tcm(2945) msg($0B, 1, 0) run_item(update)"
%COLOR_ICON%
Цвета для типов файлов (вкл./выкл.)


-1

autorun.cfg
Code:
Func SetColorByType()
   IniRead nIco %COMMANDER_INI% "Configuration" "ColorFilters" 1
   If nIco = 1 Then
      SetEnv COLOR_ICON "%COMMANDER_PATH%\Icons\Clsw\2.ico"
   Else
      SetEnv COLOR_ICON "%COMMANDER_PATH%\Icons\Clsw\6.ico"
   EndIf   
EndFunc

SetMessageAction "ColorMessage" SetColorByType

Единственный недостаток - иконки должны быть в виде отдельных фалов, TC не раскрывает переменную окружения с индексом (через запятую) как следует.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 43, 44, 45
Page 45 of 45

 
Jump to:  
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