Orion9

|
Posted: Wed Dec 11, 2024 01:18 Post subject: |
|
|
sa wrote: | Ничего невозможного уже нет! |
С каждой новой версией Autorun я убеждаюсь в этом все больше и больше
Действительно темы теперь можно создавать легко и просто, а главное делать это приятно. Обновил модуль:
 Hidden text Code: | # Ctrl+Shift+"+" - Повышение тонов
# Ctrl+Shift+"-" - Понижение тонов
# Ctrl+"+" - Автоповышение тонов
# Ctrl+"-" - Автопонижение тонов
# ESC - Выход из автоперебора
# Alt+"+" - Показ текущих значений
# Alt+Shift+"+" - Повышение тона зебра
# Alt+Shift+"-" - Понижение тона зебра
# Alt+Click (Активная) - Переключение фона из Backdrops.bar
# Alt+Click (Целевая) - Переключение резервных значений фона
Pragma IncludeOnce
Global Pulsar = 0, PulsarDelay = 50, BACKDROP_THREAD = 0, BackColor1 = 0, BackColor2 = 0, Previous1 = 0, Previous2 = 0
Global CF_NAME = "", CF_VALUE = -1, CF_KEY = 0, CF_COLOR_KEY = 0, WRITE_COLOR_MODE = 0, CL_KEY = "", CL_VALUE = -1, CL_SNAP = ""
Global CL_MousePosX = 0, CL_MousePosY = 0, TEST_HINT = 0
# задержка автоперебора
IniRead /R PulsarDelay %COMMANDER_INI% "Autorun" "PulsarDelay" 50
# панель для запоминания
Global CL_BAR = %COMMANDER_PATH% & "\Bars\Backdrops.bar"
# путь к редактору
Global CL_AKEL4 = %COMMANDER_PATH% & "\Utilites\AkelPad\AkelPad.exe", CL_TCFS2 = ""
# путь к TCFS2 для отправки сообщений
Set /EV- CL_TCFS2 "%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe"
# повышение/понижение тонов
SetHotkeyAction /K:C /K:S /V:187 /R /DM SetBackGround 1
SetHotkeyAction /K:C /K:S /V:189 /R /DM SetBackGround 2
# авто
SetHotkeyAction /K:C /V:187 SetPulsar 1
SetHotkeyAction /K:C /V:189 SetPulsar 2
# повышение/понижение тона зебра
SetHotkeyAction /K:A /K:S /V:187 /R /DM SetBackGround 1 1
SetHotkeyAction /K:A /K:S /V:189 /R /DM SetBackGround 2 1
# показать текущие значения
SetHotkeyAction /K:A /V:187 ShowBackColor 1000
# 70000-70050
# первоначальные значения цветов
# 0 - запомнить
# 1 - открыть в редакторе
RegisterCommand 70000 "InitialColors" 1
# регистрация команды для вызова из кнопки (пункта меню)
RegisterCommand 70001 "AutoBackdrop"
# запоминание текущего фона
RegisterCommand 70002 "BackColorBar"
# создание и отображение меню
RegisterCommand 70003 "ShowBackdropMenu"
# ключи секции [Color]
RegisterCommand 70004 "ColorItem" "Backdrop"
RegisterCommand 70005 "ColorItem" "MarkColor"
RegisterCommand 70006 "ColorItem" "CursorColor"
RegisterCommand 70007 "ColorItem" "ForeColor"
RegisterCommand 70008 "ColorItem" "CursorText"
RegisterCommand 70009 "ColorItem" "BackColor"
RegisterCommand 70010 "ColorItem" "BackColor2"
# ключи ColorFilter секции [Color]
RegisterCommand 70011 "ColorFilterItem" 1
RegisterCommand 70012 "ColorFilterItem" 2
RegisterCommand 70013 "ColorFilterItem" 3
RegisterCommand 70014 "ColorFilterItem" 4
RegisterCommand 70015 "ColorFilterItem" 5
RegisterCommand 70016 "ColorFilterItem" 6
RegisterCommand 70017 "ColorFilterItem" 7
RegisterCommand 70018 "ColorFilterItem" 8
RegisterCommand 70019 "ColorFilterItem" 9
RegisterCommand 70020 "ColorFilterItem" 10
RegisterCommand 70021 "ColorFilterItem" 11
RegisterCommand 70022 "ColorFilterItem" 12
RegisterCommand 70023 "ColorFilterItem" 13
RegisterCommand 70024 "ColorFilterItem" 14
RegisterCommand 70025 "ColorFilterItem" 15
# управление потоком
RegisterCommand 70050 "BackdropAction" 0
# прием сообщения окну "установить значения фона"
SetMessageAction /P "BackColorsMessage" SetBackColors
# значения фона при старте ТС
If BackColor1 = 0 or BackColor2 = 0 Then
IniRead /R BackColor1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R BackColor2 %COMMANDER_INI% "Colors" "BackColor2" -1
Endif
Func BackdropAction(lParam, lAction)
BACKDROP_THREAD = lAction
EndFunc
Func InitialColors(lParam, lMode)
Local i = 0, cf, txt
If lMode = 1 Then
# вызов пункта меню для показа значений
OpenInTextEditor(CL_SNAP)
Return
Endif
# снимок первоначальных значений
CL_SNAP = ";значения секции при запуске ТС" & auCRLF
CL_SNAP = CL_SNAP & "[Colors]" & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "ForeColor" -1
CL_SNAP = CL_SNAP & "ForeColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "BackColor" -1
CL_SNAP = CL_SNAP & "BackColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "BackColor2" -1
CL_SNAP = CL_SNAP & "BackColor2=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "MarkColor" -1
CL_SNAP = CL_SNAP & "MarkColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "CursorColor" -1
CL_SNAP = CL_SNAP & "CursorColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "CursorText" -1
CL_SNAP = CL_SNAP & "CursorText=" & txt & auCRLF
While i < 100
i = i + 1
IniRead /R cf %COMMANDER_INI% "Colors" %"'ColorFilter' & %i%" "stop"
If cf="stop" Then Break
IniRead /R txt %COMMANDER_INI% "Colors" %"'ColorFilter' & %i% & 'Color'"
CL_SNAP = CL_SNAP & cf & "=" & txt & auCRLF
Wend
EndFunc
Func AutoBackdrop(lParam)
Static StartCount = 0
# удержание Win
# тестирование фона подсказки
If BACKDROP_THREAD = 0 And IsPressed (0x5B) Then TEST_HINT = 1
# удержание Ctrl+Shift
# повышение тона на одну единицу при нажатии
# на кнопку, выборе пункта меню или вызове другим способом
If IsPressed (0x10) And IsPressed (0x11) Then Return SetBackGround(1)
# удержание Ctrl
# понижение тона на одну единицу
If IsPressed (0x11) Then Return SetBackGround(2)
# удержание Alt+Win
# вернуть предыдущий фон
If IsPressed (0x12) And IsPressed (0x5B) Then
If Previous1 > 0 or Previous2 > 0 Then WriteBackground(Previous1, Previous2)
Return
Endif
# удержание Alt+Shift
# скопировать в буфер код кнопки текущего фона
If IsPressed (0x12) And IsPressed (0x10) Then
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
ClipPut("TOTALCMD#BAR#DATA" & auCRLF & CL_TCFS2 & auCRLF & _
"/u- /ef ""msg(regmsg(BackColorsMessage), " & bkg1 & ", " & bkg2 & ")""" & auCRLF & "%COMMANDER_EXE%")
ShowBackHint("Кнопка с фоном скопирована")
Return
Endif
# удержание Alt
# вернуть первоначальный фон TC
If IsPressed (0x12) Then Return WriteBackground(BackColor1, BackColor2)
# удержание Shift
# показ текущих значений фона
If IsPressed (0x10) Then Return ShowBackColor()
# поток уже запущен
If BACKDROP_THREAD > 0 Then
If TEST_HINT = 1 Then
ShowHint("Режим TEST_HINT выключен")
TEST_HINT = 0
Sleep(700)
BACKDROP_THREAD = 0
Return
Endif
ShowPopupMenu /D /F "CreateBackdropMenu"
Else
tc = ProcessCount("TOTALCMD.EXE") + ProcessCount("TOTALCMD64.EXE")
If tc > 1 Then
ShowHint("Запущено " & tc & " процесса Total Commander" & auLF & _
"Для корректной работы требуется только одна копия TOTALCMD")
Return
EndIf
If StartCount = 0 Then InitialColors(0, 0)
BACKDROP_THREAD = 1
If TEST_HINT Then
CF_NAME = "HINT TEST MODE"
Else
# при старте парное значение фона по умолчанию
ColorItem(1, "Backdrop")
Endif
RunThread ThreadBackdrop
StartCount = StartCount + 1
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
#SetHintParam("ShowHint", "Frame", 0xFFFFFF)
ShowHint("Отслеживание запущено." & auLF & _
"CTRL - Применение цвета в окне ColorMania" & auLF & auLF & _
"SHIFT - откат, ALT - умолчание, WIN - буфер")
Sleep(2000)
#WinSetState(23)
SetHintParam("ShowHint", "Reload")
Endif
EndFunc
# прием сообщения
Func SetBackColors(hWnd, uMsg, wParam, lParam)
WriteBackground(wParam, lParam)
EndFunc
# запись парных значений
Func WriteBackground(Color1, Color2)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %Color1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %Color2%
# обновление панелей
SendCommand 2957
SendCommand 2957
EndFunc
# запись одиночных значений
Func WriteSingleColor(KeyName, KeyValue)
IniWrite /R %COMMANDER_INI% "Colors" %"%KeyName%" %KeyValue%
SendCommand 2957
SendCommand 2957
EndFunc
Func TestHintParam(ParamName, ParamValue, handle)
Local blue, green, red
blue = floor(ParamValue/65536)
green = ParamValue - (blue * 65536)
green = floor(green/256)
red = ParamValue - (blue * 65536) - (green * 256)
SetHintParam("ShowHint", ParamName, 1*blue + 256*green + 65536*red)
#SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Test text" & auCRLF & "Hex " & Hex(ParamValue, 6) & auCRLF & "Dec " & ParamValue & auLF & _
"Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue)
Sleep(100)
SetHintParam("ShowHint", "Reload")
WinSetState(23, handle)
EndFunc
# функция работает в отдельном потоке
Func ThreadBackdrop()
Local h = 0, r, g, b, c, max = 1*255 + 256*255 + 65536*255, clip, last = -1, w = 0, v = 0, action, state
# предыдущие значения фона
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
# поиск окна Color Dialog Box
h = WinFind(0, "#32770", "Цвет")
If h > 0 Then
action = "Color Dialog Box > "
If WinGetState(4, h) Then
action = action & "Active > "
r = WinGetText(WinFind(h, "Edit", 4))
g = WinGetText(WinFind(h, "Edit", 5))
b = WinGetText(WinFind(h, "Edit", 6))
# непустые поля редактирования
If Not (StrLen(r) = 0 And StrLen(g) = 0) Then
c = 1*r + 256*g + 65536*b
action = action & "Ready to apply RGB: " & r & ", " & g & ", " & b
Else
action = action & "RGB Unreachable"
EndIf
Endif
Else
# поиск окна ColorMania
h = WinFind(0, "TfrmColorPick")
If h > 0 Then
action = "ColorMania > "
If WinGetState(4, h) Then
action = action & "Active > "
c = WinGetText(WinFind(h, "TEdit", 1))
action = action & "Ready to apply value: " & c
Endif
EndIf
EndIf
If h > 0 And WinGetState(4, h) > 0 Then
If IsPressed (0x11) Then
# удержание CTRL
# значение активного окна
If StrLen(c) > 0 Then
clip = c
action = "Applying " & clip
Endif
ElseIf IsPressed (0x12) Then
# удержание ALT
# значение по умолчанию
clip = "-1"
action = "Applying -1"
ElseIf IsPressed (0x10) Then
# удержание SHIFT
# предыдущее значение
clip = CL_VALUE
action = "Undo " & clip
ElseIf IsPressed (0x5B) Then
# удержание WIN
# первая строка в буфере
clip = StrPart(ClipGet(), auLF, 1)
action = "Clipboard " & clip
ElseIf IsPressed (0x1B) Then
ColorSync(CL_VALUE)
action = "Color Sync " & clip
Endif
If CL_KEY = 'CursorColor' Or CL_KEY = 'CursorText' Then
If IsPressed (0x11) Or IsPressed (0x12) Or IsPressed (0x10) Or IsPressed (0x5B) Then WinSetState(23)
EndIf
ElseIf h > 0 And WinGetState(4, h) = 0 Then
action = action & "Not Active"
Else
action = "Waiting for a window..."
Endif
If IsInt(clip) Then
# новое число в диапазоне
If clip >= -1 And clip <= max And Not (clip = last) Then
If TEST_HINT = 1 Then
CF_NAME = "HINT TEST MODE"
WRITE_COLOR_MODE = 3
EndIf
If WRITE_COLOR_MODE = 0 Then
WriteBackground(clip, clip)
w = w + 1
ElseIf WRITE_COLOR_MODE = 1 Then
WriteSingleColor(CL_KEY, clip)
v = v + 1
Else
TestHintParam('BackColor', clip, h)
v = v + 1
Endif
last = clip
Sleep(100)
Endif
Endif
Sleep(250)
WinSetText("Changing colors > " & CF_NAME & " > " & action )
Wend
BACKDROP_THREAD = 0
WinSetText("")
WinRedraw
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Отслеживание остановлено" & auLF & _
"Применений фона: " & w & auLF & _
"Применение других значений: " & v)
Sleep(2000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func SetBackGround(nParam, nZebra = 0)
Local bkg1, bkg2, max = 1*255 + 256*255 + 65536*255
# при автоизменении потолок чуть меньше
# попытка предотвратить переход в серые тона
If Pulsar = 1 Then max = 1*245 + 256*245 + 65536*245
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
If Not IsInt(bkg1) Or Not IsInt(bkg2) Then
MsgBox("Нечисловые значения цвета фона: " & auLF & auLF & _
"BackColor=" & bkg1 & auLF & "BackColor2=" & bkg2 & auLF & auLF & _
"ESC - Отмена операции")
Return
Endif
If bkg1 = -1 Then bkg1 = max
If bkg2 = -1 Then bkg2 = max
If nParam = 1 Then
bkg1 = bkg1 + 1 + 256 + 65536
bkg2 = bkg2 + 1 + 256 + 65536
Else
bkg1 = bkg1 - 1 - 256 - 65536
bkg2 = bkg2 - 1 - 256 - 65536
Endif
If bkg1 > max Then bkg1 = bkg1 - 1 - 256 - 65536
If bkg2 > max Then bkg2 = bkg2 - 1 - 256 - 65536
If bkg1 < -1 Then bkg1 = max
If bkg2 < -1 Then bkg2 = max
If nZebra Then
WriteSingleColor("BackColor2", bkg2)
Else
WriteBackground(bkg1, bkg2)
Endif
EndFunc
Func SetPulsar(nParam)
local a, b, s, l
static t = 0
If Pulsar = 1 Then
Pulsar = 0
Return
Endif
Pulsar = 1
If nParam = 1 Then
a = 1
b = 2
s = 1
Else
a = 2
b = 1
s = -1
Endif
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While Pulsar = 1
For j = a To b step s
For i = 1 To 75
SetBackGround(j)
# значение можно увеличить
# если мерцает только одна панель
Sleep(PulsarDelay)
l = l + 1
t = t + 1
If Pulsar = 0 Then Break
If IsPressed (0x1B) Then
Pulsar = 0
Break
Endif
Next
If Pulsar = 0 Then Break
Next
Wend
# показать статистику, если выход по ESC
If IsPressed (0x1B) Then
ShowHint("Изменений тонов: " & l & auCRLF & "Всего изменений: " & t)
Endif
EndFunc
Func ShowBackColor(lDelay = 300)
Local txt, bkg1, bkg2, max = 1*255 + 256*255 + 65536*255
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
If bkg1 = -1 Then bkg1 = max
If bkg2 = -1 Then bkg2 = max
# обратный расчет
blue = floor(bkg1/65536)
green = bkg1 - (blue * 65536)
green = floor(green/256)
red = bkg1 - (blue * 65536) - (green * 256)
txt = "Фон 1" & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue & auLF & "Значение: " & bkg1
txt = txt & auLF & "" & auLF
blue = floor(bkg2/65536)
green = bkg2 - (blue * 65536)
green = floor(green/256)
red = bkg2 - (blue * 65536) - (green * 256)
txt = txt & "Фон 2" & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue & auLF & "Значение: " & bkg2
ShowHint(txt)
EndFunc
Func BackColorBar(lParam)
Local i, bkg1, bkg2, bar = CL_BAR
If Not FileExist(bar) Then
MsgBox("Файл не существует " & bar, "Backdrop")
Return
Endif
IniRead i %bar% "Buttonbar" "Buttoncount" 0
If Not IsInt(i) or i < 1 Then
MsgBox("Ошибка Buttoncount < 1 " & auCRLF & bar, "Backdrop")
Return
Endif
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
i = i + 1
IniWrite /EV- %bar% "Buttonbar" %"'Button' & %i%" "%COMMANDER_EXE%"
IniWrite %bar% "Buttonbar" %"'Cmd' & %i%" "%CL_TCFS2%"
IniWrite %bar% "Buttonbar" %"'Param' & %i%" '"/u- /ef "msg(regmsg(BackColorsMessage), %bkg1%, %bkg2%)"'
IniWrite %bar% "Buttonbar" %"'Menu' & %i%" "Фон %bkg1%, %bkg2%"
IniWrite %bar% "Buttonbar" "Buttoncount" %i%
ShowBackHint("Фон панелей сохранен")
EndFunc
Func ShowBackHint(BackHint, PosX = false)
SetHintParam("ShowHint", "Font", 10, "Arial")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
If PosX Then
ShowHint(BackHint, CL_MousePosX, CL_MousePosY)
Else
ShowHint(BackHint)
Endif
Sleep(1000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func CreateBackdropMenu()
Local i = 0, cf, txt
txt = txt & 'MENUITEM "Остановить отслеживание", 70050' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Фон\tBackground", 70004' & auCRLF
txt = txt & 'MENUITEM "Выделение\tMarkColor", 70005' & auCRLF
txt = txt & 'MENUITEM "Курсор\tCursorColor", 70006' & auCRLF
txt = txt & 'MENUITEM "Текст\tForeColor", 70007' & auCRLF
txt = txt & 'MENUITEM "Текст под курсором\tCursorText", 70008' & auCRLF
txt = txt & 'MENUITEM "Фон 1\tBackColor", 70009' & auCRLF
txt = txt & 'MENUITEM "Фон 2\tBackColor2", 70010' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
While i < 100
i = i + 1
IniRead /R cf %COMMANDER_INI% "Colors" %"'ColorFilter' & %i%" "stop"
If cf="stop" Then Break
txt = txt & 'MENUITEM "' & cf & '", 700' & 10+i & auCRLF
Wend
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
If BACKDROP_THREAD > 0 Then
txt = txt & 'MENUITEM "Текущий элемент - ' & CF_NAME & '", 70050' & auCRLF
EndIf
txt = txt & 'MENUITEM "Первоначальные значения секции [Colors]", 70000'
Return txt
EndFunc
Func ShowBackdropMenu(lParam)
# вызов с Shift
# копировать значение -1 в буфер
If IsPressed(0x10) Then
SetDefaultColor
Return
EndIf
# координаты кнопки вызова меню
MouseGetPos("CL_MousePosX", "CL_MousePosY")
ShowPopupMenu /D /F "CreateBackdropMenu"
EndFunc
Func ColorFilterItem(lParam, wItem)
Local key1, key2, val1, val2
If BACKDROP_THREAD = 0 Then
ShowHint("Отслеживание цвета не запущено")
Return
Endif
key1 = "ColorFilter" & wItem
key2 = key1 & "Color"
IniRead /R val1 %COMMANDER_INI% "Colors" %"%key1%" ""
IniRead /R val2 %COMMANDER_INI% "Colors" %"%key2%" ""
# формат "ColorFilter1"
CF_KEY = key1
# формат "ColorFilter1Color"
CF_COLOR_KEY = key2
# формат "Имя фильтра", например "Autorun"
CF_NAME = val1
# формат "Цвет фильтра", например "65535"
CF_VALUE = val2
# глобальные значения для потока
CL_KEY = CF_COLOR_KEY
CL_VALUE = CF_VALUE
# режим записи "Одиночный ключ"
WRITE_COLOR_MODE = 1
ColorItemChange(CL_VALUE)
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME, false)
EndFunc
Func ColorItem(lParam, sItem)
Local key, val
If BACKDROP_THREAD = 0 Then
ShowHint("Отслеживание цвета не запущено")
Return
Endif
# парный однотонный фон BackColor = BackColor2
If sItem = "Backdrop" Then
# режим записи "Парный ключ"
WRITE_COLOR_MODE = 0
# Имя для потока
CF_NAME = "Background"
IniRead /R val %COMMANDER_INI% "Colors" "BackColor" -1
# значение цвета
CL_VALUE = val
ColorItemChange(CL_VALUE)
# запуск из меню
If lParam = 0 Then
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME)
Endif
Return
Endif
key = sItem
IniRead /R val %COMMANDER_INI% "Colors" %"%key%" ""
# глобальные значения для потока
CL_KEY = key
CL_VALUE = val
CF_NAME = key
WRITE_COLOR_MODE = 1
ColorItemChange(CL_VALUE)
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME, false)
EndFunc
# не применять изменения цвета при смене элемента
Func ColorItemChange(ColorText)
# очистка буфера при смене элемента
ClipPut(ColorText)
# ColorSync(ColorText)
EndFunc
Func ColorSync(ColorText)
Local h = WinFind(0, "TfrmColorPick")
If h > 0 Then
# синхронизация цвета с окном ColorMania
WinSetText(ColorText, WinFind(h, "TEdit", 1))
b = WinFind(h, "TButton", 2)
SendMessage(b, 0xF5, 0, 0)
Endif
EndFunc
Func OpenInTextEditor(Text)
Local h = 0
ClipPut(Text)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %CL_AKEL4% '/Command(4101) /Command(4155)'
Return
Endif
If Not FileExist(CL_AKEL4) Then
ShowHint("AkelPad не найден " & CL_AKEL4 & "Текст значений скопирован в буфер.")
Else
ShellExec /SW_SHOWNORMAL %CL_AKEL4% ' /Command(4155)'
Endif
EndFunc
Func SetDefaultColor()
If BACKDROP_THREAD > 0 Then
ClipPut("-1")
ShowBackHint("Установлен цвет по-умолчанию для " & CF_NAME)
Else
ShowHint("Отслеживание цвета не запущено")
Endif
EndFunc
# массивы значений из бар-файла
Global aBarList = List(), _
aBarList2 = List()
# массивы резевных значений при ошибках чтения бар-файла
Global aBackList = List(7566195, 7497811, 9865603, 8421230)
Global aBackList2 = List(7566195, 7497811, 9865603, 8421230)
# начальный фон
Global ColorStart = BackColor1 , ColorStart2 = BackColor2
# добавление начального фона к резерву
aBackList.Add(ColorStart)
aBackList2.Add(ColorStart2)
# Alt+Click активная панель
# использовать бар-файл для переключения фона
ControlSetMouseAction /L /K:A 3 SetColorNum 1
# Alt+Click неактивная панель
# использовать массив отката для переключения фона
ControlSetMouseAction /L /K:A 4 SetColorNum 2
# регистрация команды
# вызов из кнопки или пункта меню
RegisterCommand 70040 "SetColorNum"
Func SetColorNum(lParam)
Local bkg1, bkg2, blue, green, red, txt
# удержание Win (клик на панели)
# смена цветовой схемы
If lParam = 1 And IsPressed(0x5B) Then
SwitchColors(1)
Return
EndIf
# удержание Win (вызов из кнопки)
If lParam = 0 And IsPressed(0x5B) Then
If IsPressed(0x12) Then
SetPulsar 1
Return
ElseIf IsPressed(0x11) Then
SetPulsar 2
Return
Endif
EndIf
# удержание Alt (вызов из кнопки)
If lParam = 0 And IsPressed(0x12) Then
If IsPressed(0x10) Then
SetPulsarDelay -10
Else
SetPulsarDelay +10
Endif
Return
EndIf
# массивы для переключения цвета фона
Local aColorsList, aColorsList2
# индекс цвета в массиве
Static ColorIndex = -1
# массив из бар-файла по умолчанию
If lParam = 0 Then lParam = 1
# удержание Ctrl
# использовать резевный массив
If IsPressed(0x11) Then lParam = 2
# удержание Win
# принудительное чтение бар-файла
If lParam = 1 And IsPressed(0x5B) Then aBarList.Count = 0
# инициализация массива из бар-файла
If lParam = 1 And aBarList.Count = 0 Then
If Not LoadColorBar() Then
Sleep(1000)
WinSetState(23)
Return
EndIf
EndIf
If lParam = 1 Then
aColorsList = aBarList
aColorsList2 = aBarList2
Else
aColorsList = aBackList
aColorsList2 = aBackList2
EndIf
ColorIndex = ColorIndex + 1
If ColorIndex > aColorsList.Count - 1 Then ColorIndex = 0
bkg1 = aColorsList[ColorIndex]
bkg2 = aColorsList2[ColorIndex]
WriteBackground(bkg1, bkg2)
txt = "Фон " & ColorIndex + 1 & " из " & aColorsList.Count & auLF & "Значение: " & bkg1
If bkg1 = -1 Then bkg1 = 1*255 + 256*255 + 65536*255
blue = floor(bkg1/65536)
green = bkg1 - (blue * 65536)
green = floor(green/256)
red = bkg1 - (blue * 65536) - (green * 256)
txt = txt & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue
ShowHint(txt)
EndFunc
Func LoadColorBar()
Local i, b, b2, p, c, bar = CL_BAR, max = 1*255 + 256*255 + 65536*255
If Not FileExist(bar) Then
ShowHint("Панель не существует: " & bar)
Return 0
Endif
IniRead c %bar% "Buttonbar" "Buttoncount" -1
If c = -1 Or IsInt(c) = false Then
ShowHint("Панель повреждена: " & bar)
Return 0
EndIf
If c < 1 Then
ShowHint("Количество кнопок < 1 " & bar)
Return 0
Endif
# очистка от старых значений
aBarList.Count = 0
aBarList2.Count = 0
For i = 1 To c
# перебор ключей ParamN
IniRead p %bar% "Buttonbar" %"'Param' & %i%" ""
# маркер не найден
If Not StrPos(p, "BackColorsMessage") Then Continue
# маркер найден: значение ключа ParamN
b = StrTrim(StrPart(p, ",", 2))
b2 = StrTrim(StrPart(p, ",", 3))
b2 = StrPart(b2, ")", 1)
# корректное значение сохраненного фона
If IsInt(b) And b >= 0 and b <= max Then
aBarList.Add(b)
# корректное значение второго фона
If IsInt(b2) And b2 >= 0 and b2 <= max Then
aBarList2.Add(b2)
Else
# некорректное значение второго фона
aBarList2.Add(b)
EndIf
EndIf
Next
# перебор не дал результата
If aBarList.Count = 0 Then
ShowHint("Панель не содержит значений фона " & auCRLF & bar)
Return 0
Endif
# значения найдены
# добавление начального фона к массивам
aBarList.Add(ColorStart)
aBarList2.Add(ColorStart2)
Return 1
EndFunc
Func SetPulsarDelay(lParam)
PulsarDelay += lParam
If PulsarDelay > 200 Then PulsarDelay = 20
If PulsarDelay < 20 Then PulsarDelay = 200
IniWrite /R %COMMANDER_INI% "Autorun" "PulsarDelay" %PulsarDelay%
ShowHint("Задержка автоперебора: " & PulsarDelay)
Sleep(1000)
WinSetState(23)
EndFunc
# переключение цветовой схемы
RegisterCommand 70051 "SwitchColors"
Func SwitchColors(lParam)
Local n = "Colors", f, p = %COMMANDER_PATH% & "\Ini\", _
num, theme, desc
# счетчик номеров
Local c = 0
# оригинальный файл в ТС
f = p & n & ".ini"
IniRead num %f% "ColorTheme" "Instance" 0
IniRead desc %f% "ColorTheme" "Description"
IniRead theme %f% "ColorTheme" "Name"
# lParam 0 - вызов из кнопки
If lParam = 0 And IsPressed (0x12) Then
ShowHint("Тема: " & theme & auCRLF & "Описание: " & desc & auCRLF & "Номер: " & num)
Return
EndIf
If Not IsInt(num) Then
ShowHint("Значение Instance не является числом: " & num)
Return
Endif
If num < 0 And num > 5 Then
ShowHint("Значение Instance выходит за границы: " & num)
Return
Endif
# текущий номер темы
c = num
If c >= 5 Then c = 0
# следующий номер темы
c += 1
# текущая -> предыдущая
prev_theme = p & n & num & ".ini"
# следующая по номеру тема
next_theme = p & n & c & ".ini"
# имя файла в ТС
tc_name = n & ".ini"
prev_name = n & num & ".ini"
next_name = n & c & ".ini"
If lParam = 0 And IsPressed (0x11) Then
ShowHint(prev_theme & auCRLF & next_theme)
Return
EndIf
If Not FileExist(next_theme) Then
c = 1
If c = num Then
ShowHint("Не удалось переключиться на тему." & auCRLF & "Файл: " & next_theme)
Return
Endif
next_theme = p & n & c & ".ini"
If Not FileExist(next_theme) Then
ShowHint("Не удалось переключиться на тему." & auCRLF & "Файл: " & next_theme)
Return
Endif
EndIf
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c rename "%f%" %prev_name%'
If FileExist(f) Then
ShowHint("Не удалось переименовать " & f & " в " & prev_name)
Return
Endif
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c rename "%next_theme%" %tc_name%'
If FileExist(next_theme) Then
ShowHint("Не удалось переименовать " & next_theme & " в " & tc_name)
Return
Endif
SendCommand 2957
SendCommand 2957
# lParam 1 - вызов с указанием параметра
If lParam = 1 Then
IniRead num %f% "ColorTheme" "Instance" 0
IniRead desc %f% "ColorTheme" "Description"
IniRead theme %f% "ColorTheme" "Name"
ShowHint("Тема: " & theme & auCRLF & "Описание: " & desc & auCRLF & "Номер: " & num)
EndIf
EndFunc |
Кнопки те же.
Небольшой фикс для работы с цветом курсора и возможность переключаться между 5-ю темами. |
|