'======================= ОСНОВНЫЕ ВОЗМОЖНОСТИ УТИЛИТЫ ====================================== 1. Создание контекстных и выпадающих меню из bar, mnu, tcm файлов 2. Настройка вида меню 3. Настройка тем меню 4. Вызов любых команд из меню 5. Использование своего синтаксиса меню 6. При удерживании Shift и кликом левой кнопки мыши в буфер обмена копируется код кнопки для вставки на панель инструментов Total Commander 7. При удерживании Ctrl и кликом левой кнопки мыши открывается bar на редактирование заданной кнопки, остальные файлы (mnu, tcm) открываются в редакторе 8. Использование локальных шрифтов 9. Включение/Выключение прозрачности меню при нажатии правой кнопки мыши 10. Диалог смены темы для нескольких меню '================================= ПАРАМЕТРЫ =============================================== FILEBAR/MNU||#THEME||$TITLE - FILEBAR/MNU - обязательный параметр, который идёт всегда первым, где FILEBAR/MNU - путь к файлу .bar или .mnu - далее необязательные параметры, которые разделяются || - #THEME - внешний вид меню, где THEME - имя секции в MENUIMG.ini, в которой прописываются настройки в ключах BkColor - фон меню, IconBkColor - 1-й фон области значков, IconBkGrdColor - 2-й фон области значков, SelectBkColor - фон пункта при наведении курсора, SelectRectColor - обводка вокруг фона пункта при наведении курсора, TextColor - цвет текста меню, SelectTextColor - изменение цвета текста при наведении курсора - $TITLE - название меню, где TITLE - название отображаемое в самом вверху
утилита для создания различных контекстных меню из *.BAR,*.MNU файлов Total Commander.
Вижу процесс идёт! Отлично! Утилита мне понравилась - она 2 в одном. Теперь TCmenu и TcMenuPopup можно убрать, тем более по сравнению с TCmenu работает стабильнее при больших списках меню, а по сравнению с TcMenuPopup отображает значки и можно настраивать варианты внешнего вида! Есть небольшой минусик - работает чуть медленнее. Вопрос: поддержка размера планируется?
Замечательное начинание. Спасибо за утилиту Пусть нет той миниатюрной изящности языка С как в TcMenuPopup или PopSel, но возможность гибкой настройки, привязки к панелям и меню Тотала и наличие энтузиазма для доработки - то чего так не хватало. Надеюсь, глубина вложенности поддерживается любая? (в PopSel как-раз неудобен всего один уровень подменю). Маленький нюанс - абсолютный путь к ResHackerу лучше убрать.
По поводу шрифтов - присоединяюсь. Принципиально. И не только размер и начертание, но и тип шрифта. Плюс возможность задать в параметрах также пропорциональный размер шрифта относительно размера шрифта Тотала. Второе пожелание (о котором я когда-то просил ещё в контексте TcMenuPopup) - сделать возможность привязывать любой относительной точки меню к любой точке экрана, окна Тотала, панели Тотала. Как я себе это представляю: Параметры: TTOTAL_CMD absolute (0;0) (5;5) - за основу берётся окно Тотала, путь абсолютный, левый верхний угол меню (0;0) помещается в координаты (5;5) левого верхнего угла окна Тотала. TMyListBox1 absolute (0;0) (0;0) - верхний левый угол меню помещается в верхний левый угол правой файловой панели Тотала. TTOTAL_CMD relative (50;50) (50;50) - центр меню (за основу берётся 50% от левого края меню, 50% от сверху меню) помещается в центр окна Тотала (то есть в точку с координатами 50% слева, 50% сверху). Windows relative (50;50) (25;25) - центр меню помещается в центр левого верхнего угла экрана.
Не очень понял - откуда берутся иконки для mnu-файлов? Из usercmd и соответствующих тоталовских языковых файлов? Ох, это большой не-гуд... Тогда редактировать будет совсем уныло при большом количестве менюшек при их изменениях. Лучше тогда сделать для каждого такого mnu отдельный файл настроек по типу Wcmicons.inc/Wciconex.inc с заданием порядка иконки из заданного контейнера в зависимости от позиции пункта меню. Тогда можно будет назначать иконки даже пунктам выпадающего подменю. Или ещё лучше (наверное, оптимальный вариант) - как в Акелпаде.
PS. Кстати, цвет в настройках задаётся в привычном RGB или как в настройках Тотала - в BGR ? DreamLair.net
Сообщение отредактировал LonerD - Суббота, 09.03.2013, 20:30
Вношу предложение, реализация какого сложна и требует большого ума и знаний. Буду рассказывать, как я понимаю, если что, спрашивайте Итак, menuimg в данный момент понимает два формата меню - bar (формат панелей инструментов Total Commander) и mnu (формат главного меню Total Commander). В bar все кнопки и параметры хранятся в нем самом, в одном файле, да и кнопки на сайте представлены для bar. В mnu содержится только текст команды и ее идентификатор, все параметры хранятся в wcmd_rus.ini или usercmd.ini, но зато есть возможность добавления подменю. Вот отрезки из файлов bar и mnu Bar
Меню синхронизации выбрано для примера просто, синтаксис может быть и не такой. Основная идея - поддержка подменю, как в mnu, и сохранение всех параметров кнопок в панели нового формата. Ну и чтобы можно было копировать код кнопок с сайта, как то реализовать работу с новыми видами панелей.
Сообщение отредактировал asmadeus - Понедельник, 11.03.2013, 18:37
Изобретать велосипед имхо ни к чему. Просто и удобней будет сделать так: в настройках MENUIMG сделать возможность указать ini-файлы (желательно несколько) из которых будут считываться em-команды. Тогда если эти команды не используются в самом Тотале напрямую - можно будет их выносить в отдельный файл(ы), подключаемый(е) к MENUIMG.
asmadeus И к слову - для BCompare лучше добавить %Z%X. А для WinMerge - добавить /r /e /x /s %Z%X. А файлы добавлять к сравнению через lst2str. DreamLair.net
Да, любая, но при больших меню пока явное торможение... возможно разрешится проблема с кешем
Цитата (LonerD)
По поводу шрифтов - присоединяюсь. Принципиально.
Цитата (LonerD)
относительной точки меню к любой точке экрана, окна Тотала, панели Тотала.
Реализация в пути...
Цитата (LonerD)
Не очень понял - откуда берутся иконки для mnu-файлов? Из usercmd и соответствующих тоталовских языковых файлов? Ох, это большой не-гуд...
Утилита вышла с базовой основой... Кроме Wcmd_Rus.ini и UserCmd.ini я не пользуюсь ничем, и легко ими оперирую, вернее не я а скрипты, и главное меню пересобирается в 3 сек. Поэтому для других предложений требуется:
Вопрос поддержки других ini файлов, значков, синтаксиса... я не против.
1. Необходимо выслать несколько файлов с любым внятным синтаксисом, я постараюсь их переложить 2. Папка со значками или файл библиотеки для тестирования
Цитата (asmadeus)
Идея - изобрести новый формат меню, новое расширение ( например, *.tcm) и добавить поддержку в menuimg. А меню синхронизации тогда выглядело бы так
Идея хорошая - соберётся достаточно нужной информации - сделаю
Цитата (LonerD)
сделать возможность указать ini-файлы (желательно несколько) из которых будут считываться em-команды. Тогда если эти команды не используются в самом Тотале напрямую - можно будет их выносить в отдельный файл(ы), подключаемый(е) к MENUIMG.
Да нет проблем, выслать несколько файлов и работа закипела
Где - [Path] - Путь к программе [Param] - Параметры запуска программы [Icon] - Номер иконки в библиотеке wcmicons.dll [Name] - имя в всплывающем меню символ [-] указывает на подменю, [--] - подменю второго уровня и т.д
Для примера кнопка
Код
TOTALCMD#BAR#DATA "%COMMANDER_PATH%\TCIMG.exe" [imgup=%P%N||2||-1||300||300||0||100] %COMMANDER_PATH%\Wcmicons.dll,1317 Показать изображение под курсором слева 0 -1
выглядела бы так
Код
[%COMMANDER_PATH%\TCIMG.exe],[imgup=%P%N||2||-1||300||300||0||100],[1317],[Показать изображение под курсором слева]
Информация накапливается... Это видимо часть синтаксиса и для одной команды, а нужна структура... 1. Не хватает - названия пункта меню - сепаратора - серого заблокированного под названия - имена уровней, подуровней 2. [квадратные скобки не пойдут] - очень много команд их используют и вообще обычные символы разделители не устраивают, можно попробовать взять разделитель из неиспользуемых, к примеру ¦, ‡ ...
ITEMMENU #::{20D04FE0-3AEA-1069-A2D8-08002B30309D}#,#298#,#Родной компьютер Win+ E# SEPARATE ITEMMENU #%WINDIR%\System32\taskmgr.exe#,#299#,#Диспетчер Задач Ctrl+Shift+Esc# ITEMMENU #%WINDIR%\System32\control.exe#,#300#,#Панель Управления Alt+T# ITEMMENU #%WINDIR%\System32\services.msc#,#323#,#Службы# ITEMMENU #Path#,#Param#,#Icon#,#Name# SEPARATE ITEMMENU #notepad.exe#,#%P%N#,#551#,#Открыть файл под курсором в NotePad# ITEMMENU #Calc.exe#,#558#,#Калькулятор# ITEMMENU #SndVol.exe#,#717#,#Настройка системного звука# ITEMMENU #osk.exe#,#312#,#Клавиатура# ITEMMENU #%COMMANDER_PATH%\TCIMG.exe#,#nkey=key#,#1524#,#Смена раскладки клавиатуры Ctrl + Spase# SEPARATE ITEMMENU #%COMMANDER_PATH%\Utilities\Systems\SysRestorePoint\SysRestorePoint.exe#,#1657#,#Создание точки восстановления в фоне# SEPARATE SECOND_MENU #Управление питанием компьютера# ITEMMENU #%COMMANDER_PATH%\Utilities\Systems\PowerOff\PowerOff.exe#,#monitor_off#,#2012#,#Погасить монитор# ITEMMENU #shutdown#,#-s -t 0#,#30#,#Выключение Ctrl+Shift+Alt+Del# ITEMMENU #shutdown#,#-r -t 0#,#31#,#Перезагрузка Ctrl+Shift+Alt+Home# ITEMMENU #rundll32 powrprof.dll,SetSuspendState#,#32#,#Спящий режим Ctrl+Shift+Alt+End# ITEMMENU #%COMMANDER_PATH%\Utilities\Systems\PowerOff\PowerOff.exe#,#lock#,#2013#,#Заблокировать компьютер# ITEMMENU #%COMMANDER_PATH%\Utilities\Systems\PowerOff\PowerOff.exe#,#logoff#,#2014#,#Выход из пользователя# END_SECOND SEPARATE ITEMMENU #%COMMANDER_PATH%\Utilities\Systems\SwitchOff\SwOff.exe#,#Param#,#1074#,#Выключение по расписанию SwitchOff#
Итак, Separate - разделитель ITEMMENU - пункт меню SECOND_MENU - начало подменю END_SECOND-конец подменю
Код
Общий синтаксис команды: ITEMMENU #Path#,#Param#,#Icon#,#Name#
Где - #Path# - Путь к программе или встроенный парамерт Total Commander #Param# - Параметры запуска программы #Icon# - Номер иконки в библиотеке wcmicons.dll или любой другой библиотеке или просто иконка ( должна быть тогда добавлена соответствующая функция) #Name# - имя команды, отображаемое в меню
Если это не структура, тогда я не пойму, что надо.
Это структура, но откуда такое желание всё переусложнять?? Ещё раз повторяюсь - незачем изобретать велосипед. Гислер изобрёл всё давным давно, оно работает вполне исправно.
Зачем все эти разделители и запятые, которые надо ещё парсить?? Потом пытаться понять что-то в этих многоэтажных командах... У кого в параметрах - три буквы две цифры, тем, возможно, и проще будет. А у меня, например, в параметрах и запятые в разных комбинациях, и разные спецсимволы используются, и сами параметры достигают до 1000 знаков.
Берём самое обычное меню Тотала - mnu-файл. Берём самый обычный файл с командами. Пусть это будет usercmd.ini или Wcmd_eng.ini или любой другой, обзовём его как угодно. И всё, больше ничего не нужно. MNUFILE||EMFILE(S)||#THEME||$TITLE В параметрах указываем путь к mnu-файлу, путь к файлу с em-коммандами. Можно предусмотреть подключение нескольких файлов с em-командами, разделив их запятыми или какими-либо разделительными символами.
Хочется всё запихнуть в один файл - да не вопрос, указываем в качестве EMFILE тот самый mnu-файл, и меню тогда будет выглядеть так:
Код
POPUP "Открыть" MENUITEM "Открыть текущий файл\tEnter / Alt+Space", cm_Return POPUP "Открыть с приоритетом" MENUITEM "Запуск с приоритетом Low", em_start_prioritylow MENUITEM "Запуск с приорит. BelowNormal", em_start_prioritybelownormal MENUITEM "Запуск с приоритетом Normal", em_start_prioritynormal MENUITEM "Запуск с приорит. AboveNormal", em_start_priorityabovenormal MENUITEM "Запуск с приоритетом High", em_start_priorityhigh MENUITEM "Запуск с приоритетом Wait", em_start_prioritywait MENUITEM "Запуск с приорит. RealTime", em_start_priorityrealtime END_POPUP END_POPUP
[em_start_prioritylow] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /low "Start in Low Priority" "%P%%i" menu=Start in Low Priority [em_start_prioritynormal] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /normal "Start in Normal Priority" "%P%%i" menu=Start in Normal Priority [em_start_priorityhigh] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /high "Start in High Priority" "%P%%i" menu=Start in High Priority [em_start_priorityrealtime] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /realtime "Start in RealTime Priority" "%P%%i" menu=Start in RealTime Priority [em_start_prioritywait] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /wait "Start in Wait" "%P%%i" menu=Start in Wait [em_start_priorityabovenormal] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /abovenormal "Start in Above Normal Priority" "%P%%i" menu=Start in Above Normal Priority [em_start_prioritybelownormal] cmd=%commander_path%\Plugins\exe\Hidcon.exe %comspec% /c for /f "delims= tokens=1" %i param=in ('type %WF') do start /belownormal "Start in Below Normal Priority" "%P%%i" menu=Start in Below Normal Priority
Всё предельно чётко и на своём месте, всё разложено по полочкам, а не смешано в неперевариваемую однострочную кашу из заголовков, параметров, команд, разделителей и парсеров... Но в то же время всё в одном файле. Один нюанс - нужно как-то разделить меню и непосредственно команды. Тут вижу по крайней мере два выхода: 1) автоматом подсчитывать где заканчивается меню путём сравнения количества POPUP и END_POPUP; 2) менжду меню и командами вставлять некий разделитель (спецсимвол или слово), по которому MENUIMG будет понимать, что дальше в файле содержатся команды. DreamLair.net
Сообщение отредактировал LonerD - Четверг, 14.03.2013, 00:02
Берём самое обычное меню Тотала - mnu-файл. Берём самый обычный файл с командами. Пусть это будет usercmd.ini или Wcmd_eng.ini или любой другой, обзовём его как угодно. И всё, больше ничего не нужно. MNUFILE||EMFILE(S)||#THEME||$TITLE В параметрах указываем путь к mnu-файлу, путь к файлу с em-коммандами. Можно предусмотреть подключение нескольких файлов с em-командами, разделив их запятыми или какими-либо разделительными символами.
Чем же ваше предложение отличается от того, что уже есть в утилите? 1. Утилита читает меню гислера. 2. Поддерживает любые команды. 3. Поддерживает чтение команд из UserCmd.ini
Зачем же вставлять [команды ниже меню], когда то же самое есть UserCmd.ini Ведь одной и той же em_ командой я пользуюсь не только в этом меню, но и на панелях... Зачем же дублировать и там и там? И откуда берутся значки в вашем варианте?
Цитата (LonerD)
Один нюанс - нужно как-то разделить меню и непосредственно команды.
Разделить просто - перед меню пишется [МЕНЮ]
А как быть в таком расположении 1. Со встроенными командами и присвоению им своего значка 2. С серым полуназванием 3. Возможно есть ещё нюансы
Предлагаю объединить:
Код
P=Открыть M=Открыть текущий файл\tEnter / Alt+Space||cm_Return||Wcmicons.dll||5 P=Открыть с приоритетом M=Запуск с приоритетом Low||em_start_prioritylow||Wcmicons.dll||125 M=Запуск с приорит. BelowNormal||em_start_prioritybelownormal||My.dll||1225 G=Серое название M=Запуск с приоритетом Normal||em_start_prioritynormal||My2.dll||125 S (сепаратор) M=Запуск с приорит. AboveNormal||em_start_priorityabovenormal (без значка) E E
ИМХО для меню важно: - Название. - Значок. - Номер значка. - Имя Команды при вызове.
Такое меню парсить проще - ни пробелов, ни запятых, ни кавычек, тем более, что есть команда в Autoit IniReadSection
+ меню является СЕКЦИЕЙ , и в таком файле можно прописать кучу всяких меню. А команды класть куда угодно.
Идея asmadeus тоже имеет право на существование, тем более Андрей, готов осуществить нетолько эти идеи... за что ему отдельное спасибо
+ не надо создавать команды, а всё в одном месте
- это синтаксис, но к любому привыкаешь, помню как html первый раз увидел, а сейчас всё просто
Внесу и туда свои 6 копеек
Код
M=::{20D04FE0-3AEA-1069-A2D8-08002B30309D}¦298¦Родной компьютер Win+ E S M=%WINDIR%\System32\taskmgr.exe¦299¦Диспетчер Задач Ctrl+Shift+Esc M=%WINDIR%\System32\control.exe¦300¦Панель Управления Alt+T S M=notepad.exe¦%P%N¦551¦Открыть файл под курсором в NotePad P=Управление питанием компьютера M=%COMMANDER_PATH%\Utilities\Systems\PowerOff\PowerOff.exe¦monitor_off¦2012¦Погасить монитор M=shutdown¦-s -t 0¦30¦Выключение Ctrl+Shift+Alt+Del E
И уже не так страшно, но опять же расстановка Сначала лучше "погасить монитор", а потом всё остальное