Обмен кнопками
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 43, 44, 45  :| |:
Total Commander -> Секреты и советы

#661:  Author: sa PostPosted: Sat Jul 25, 2020 08:57
    —
Вариант для 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

#662:  Author: FlasherLocation: Москва PostPosted: Sat Jul 25, 2020 11:54
    —
Quote:
как в предыдущем сообщении, но без команды 2918
Для варианта с правильным сообщением это поправимо.

#663:  Author: sa PostPosted: Mon Jul 27, 2020 17:50
    —
При остающемся неизменным алгоритме работы кнопки (перейти к первому выделенному объекту и выполнить команду "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

#664:  Author: FlasherLocation: Москва PostPosted: Tue Jul 28, 2020 12:30
    —
Это всё, конечно, весело-забавно, не иначе как для топика "околокоммандерный ЮмАр". )
Но я лучше предложу что-то поинтересней с добавкой в свой код 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

#665:  Author: sa PostPosted: Fri Jul 31, 2020 17:13
    —
При так и остающемся неизменным алгоритме работы кнопки, ещё пара способов сообщения об ошибке. Первый - с командой 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.



Total Commander -> Секреты и советы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 43, 44, 45  :| |:
Page 45 of 45

Powered by phpBB © 2001, 2005 phpBB Group