| View previous topic :: View next topic |
| Author |
Message |
Avada

Joined: 01 Aug 2008 Posts: 10518 Location: Россия, Саратов
|
(Separately) Posted: Fri Apr 23, 2021 15:11 Post subject: |
|
|
lz57005
...А ваше сообщение, являясь дублем этого, нарушает правила форума. Дублировать информацию не надо ни в разных подфорумах, ни в одном. Про заглавные буквы и точки в правилах тоже говорится. Получите замечание по совокупности достижений. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1113
|
(Separately) Posted: Fri May 15, 2026 12:19 Post subject: |
|
|
Не ждали через 5 лет? А тем временем появилось более современное и интегрированное решение данной задачи.
Спасибо пользователю lz57005 за отлов нужных сообщений. Именно благодаря этим сообщениям переключение ассоциаций происходит очень гладко.
Пример из справки плагина Autorun:
 Hidden text | Code: | # Автор — Flasher
# Включение/отключение внутренних ассоциаций
RegisterCommand 64000 SwitchInternalAssociations
Func SwitchInternalAssociations(lParam)
Local oIni = TextFile(COMMANDER_INI), Enc = oIni.Encoding, i, Str1, Str2, _
Pos1, Pos2, x = 15, Text, FSize = FileGetSize(COMMANDER_INI), Mess
Free(oIni)
oIni = BinaryFile(COMMANDER_INI, 'rw-d')
While oIni.Pos < FSize
i += 15
Str1 = oIni.ReadStr(15, Enc)
Pos1 = StrPos(Str2 & Str1, '[Associations]')
Pos2 = StrPos(Str2 & Str1, '[-Associations]')
If Str2 <> '' Then x = 30
If Pos1 Then
oIni.Pos = 0
Text = oIni.ReadStr(i - x + Pos1, Enc) & '-' & oIni.ReadStr(0, Enc)
oIni.Pos = 0
oIni.WriteStr(Text, 0, Enc)
Free(oIni)
Mess = 'ОТКЛЮЧЕНЫ!'
Break
ElseIf Pos2 Then
oIni.Pos = 0
Text = oIni.ReadStr(i - x + Pos2, Enc)
oIni.Seek(1, 1)
Text = Text & oIni.ReadStr(0, Enc)
Free(oIni)
FileWrite(COMMANDER_INI, Text, Enc)
Mess = 'ВКЛЮЧЕНЫ!'
Break
EndIf
Str2 = Str1
Wend
Static aCounter
aCounter += 1
If Mess = '' Then
Mess = 'ОТСУТСТВУЮТ!'
Else
PostMessage(AUTORUN_TCHANDLE, 147, 0, 1302100)
If aCounter = 1 And Mess = 'ВКЛЮЧЕНЫ!' Then
PostMessage(AUTORUN_TCHANDLE, 1045)
Else
SendCommand(2958)
EndIf
EndIf
ShowHint('Внутренние ассоциации ' & Mess, -1000, -1000, 1500, 1)
WinAlign(LAST_HINT_WINDOW, 0, RequestInfo(3), 0)
EndFunc |
Установка и настройка плагина имеет ряд особенностей и выходит за рамки топика. Что касается последней версии, то
К скрипту из справки можно добавить функцию для гладкого переключения иконки на панели инструментов. Создается переменная окружения, которая сохраняет путь к иконке в зависимости от состояния секции в 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
|
|
|
| Back to top |
|
 |
|
|
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
|