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 

Drag&Drop на главной панели инструментов

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 1163

Post (Separately) Posted: Wed Jun 17, 2026 00:37    Post subject: Drag&Drop на главной панели инструментов Reply with quote

Реализация Drag&Drop при помощи плагина Autorun. Скрипт предназначен для перетаскивания кнопок на главной панели инструментов и отображения дополнительной информации о кнопках, включая их индекс.

Информация о кнопках отображается в подсказке при наведении указателя мыши с удержанием Shift (можно сначала навести указатель на кнопку, затем нажать Shift). Перетаскивание работает с удержанием CTRL (нужен только для захвата, при перетаскивании удерживать не требуется), но только после отображения первой подсказки. Первый вызов подсказки загружает информацию о панели (из соответствующего bar-файла) для дальнейшей работы с ним. Сочетание CTRL + ПКМ вызывает контекстное меню с дополнительными опциями. Меню становится доступным только после загрузки информации о панели (отображения первой подсказки).

 Плагин Autorun

 autorun.cfg

 Bars.aucfg

Функционал дает возможность почувствовать, как на самом деле приятно ощущается drag'n'drop на панели. Странно, что сам Гислер не хочет его реализовывать, не смотря на то, что расчет координат для кнопок уже есть (копирование и вставка через меню, перетаскивание значков с файловой панели), а это ведь самое сложное.

 Скриншот


Добавлено от 17.06.2026.

В последней версии скрипта я исправил несколько багов, которые приводили к неправильному перетаскиванию кнопок. Пока проблем больше не вижу, но это не значит, что их нет или не может быть. Желательно делать резервные копии перед использованием.

Окно панели (класс TButtonBar в ТС х32 и класс Window в ТС х64) дает информацию только об имени файла панели без пути к нему. Это накладывает ограничения при работе с bar-файлами. Сейчас путь к файлу панели ищется только в корне ТС, подкаталоге \Bars и текущем каталоге активной (файловой) панели. Можно при помощи команды OPENBAR загрузить bar-файл на главную панель и работать с ним, но нужно иметь в виду возможный конфликт имён. При одинаковых именах bar-файлов функционал может не работать или даже вредить.

Функционал хоть и рабочий, но больше демонстрационный. Безопасно использовать только подсказку, которая ничем не навредит.

P.S. Если кому-то интересно, на скрине используется функционал раскрытия главной панели инструментов в несколько строк и загрузки иконок на главную панель.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2732

Post (Separately) Posted: Wed Jun 17, 2026 14:52    Post subject: Reply with quote

Orion9
Хорошо бы учесть при расчёте координат вариант с использованием переноса строки в панели инструментов (значение -2 в поле команды кнопки).
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1163

Post (Separately) Posted: Thu Jun 18, 2026 00:08    Post subject: Reply with quote

sa
Я разрывом на главной панели никогда не пользовался, поэтому и в функционал это не попало. Но да, надо будет подумать над разрывом в будущих версиях. Хотя код скрипта открыт, и даже комментарии кое-где имеются Very Happy

Еще раз хочу снять с себя ответственность за возможную порчу панели. Я скрипт изначально вынес из темы Autorun, чтобы больше пользователей могло видеть, какие продвинутые вещи можно делать на языке этого плагина. О простых вещах и говорить нечего. Но функционал может быть "бажным", что не удивительно. Даже Гислер опасается делать drag&drop из-за косячного переноса, притом что он имеет доступ ко всем внутренним структурам и ничем неограниченному языку программирования. Используя Autorun, приходится заниматься обратным инженегрингом и постоянным поиском лазеек, а дело это, как известно, весьма неблагодарное )
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1163

Post (Separately) Posted: Thu Jun 18, 2026 13:37    Post subject: Reply with quote

sa wrote:
значение -2 в поле команды кнопки

Думал, что без поллитра обойтись не получится (давно я этот алгоритм делал), но оказалось все проще. Нужно заменить два фрагмента в коде:
 Hidden text

 Hidden text

Есть два недостатка. Значение ключей "cmd" при сохранении в объект oCmd не сохраняются, а сохраняется только их размер (не знаю, зачем я так делал, наверное, хотел каким-то образом ускориться), в результате разрыв строки проверяется не по значению "-2", а по размеру 2. Но поскольку вероятность команды с двумя символами очень мала, пока оставил так, но нужно будет переделать.
Второй недостаток — индекс после разрыва показывает на начало следующего ряда, но это мелочь, хотя тоже в идеале нужно переделать.
В остальном вроде работает. Но как уже писалось, пока все это только на свой страх и риск Smile

Забыл упомянуть, что в модуле действует клавиша CapsLock. Она закрепляет Shift, чтобы не держать его каждый раз при вызове подсказки.

Если руки доберуться, добавлю больше комментариев в модуль со временем, особенно если косяков больше не обнаружится и если Гислер вдруг сам не сделает Drag&Drop на панели Very Happy
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
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