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 

Single Post  Topic: Кнопка вкл\выкл "внутренние ассоциации" 
Author Message
Orion9



PostPosted: Fri May 15, 2026 12:19    Post subject: Reply with quote

Не ждали через 5 лет? Smile А тем временем появилось более современное и интегрированное решение данной задачи.

Спасибо пользователю lz57005 за отлов нужных сообщений. Именно благодаря этим сообщениям переключение ассоциаций происходит очень гладко.

Пример из справки плагина Autorun:

 Hidden text

Установка и настройка плагина имеет ряд особенностей и выходит за рамки топика. Что касается последней версии, то

 Hidden text

К скрипту из справки можно добавить функцию для гладкого переключения иконки на панели инструментов. Создается переменная окружения, которая сохраняет путь к иконке в зависимости от состояния секции в ini. Эта переменная окружения прописывается в кнопку в качестве иконки. Пример функции
Code:
Func AssocState()
    Local flt
    IniRead /R flt %COMMANDER_INI% "Associations" "Filter1" ""
    # секция включена
    If flt <> "" Then
       SetEnv ICON_ASSOC "%COMMANDER_PATH%\Icons\Assoc\1.ico"
       Return true
    Endif
    # секция выключена   
    SetEnv ICON_ASSOC "%COMMANDER_PATH%\Icons\Assoc\2.ico"
    Return false
EndFunc

При старте ТС функция AssocState() должна быть один раз вызвана для инициализации текущего состояния. После переключения она вызвается еще раз с посылкой всех сообщений и перерисовкой экрана.
Code:
AssocState()
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
SendMessage(AUTORUN_TCHANDLE, 1045, 0, 0)           
SendCommand cm_ReloadBarIcons     
Sleep(10)   
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(1) 

Иконка переключается очень гладко, практически как родная иконка ТС. Отдельный тест переключения иконки
Code:
RegisterCommand 61002 "SwitchTestIcon"

SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\1.ico"

Func SwitchTestIcon()
    Static c = false
    c = (c = false ? true : false)
    If c Then
       # действия при включении
       SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\1.ico"
    Else
       # действия при выключении   
       SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\2.ico"   
    Endif   
    SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
    SendCommand 2945    # cm_ReloadBarIcons
    Sleep(10)
    SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
    WinRedraw(1)
EndFunc

Code:
TOTALCMD#BAR#DATA
61002

%ICON_TEST%
Тест переключения иконки

1
-1
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group