Orion9

|
Posted: Thu Nov 21, 2024 14:27 Post subject: |
|
|
sa wrote: | Да я так и сделал. Иначе была проблема с переключением числа строк в панели инструментов. |
Да, я там увлёкся и забыл обяъявить ее локально, хотя вроде помнил, что она с таким же именем, что и глобальная - а это всегда опасно Я там заметил еще двойную косую черту, как оно с ней работало - не понятно. Но большое спасибо за подсказку, не всегда хватает времени все протестировать. Т.ч. очень на вас расчитываю вот с этой обновой!
 Hidden text Code: | # Ctrl+Shift+"+" - Повышение тонов
# Ctrl+Shift+"-" - Понижение тонов
# Ctrl+"+" - Автоповышение тонов
# Ctrl+"-" - Автопонижение тонов
# ESC - Выход из автоперебора
# Alt+"+" - Показ текущих значений
Pragma IncludeOnce
Global Pulsar = 0, 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_BAR = %COMMANDER_PATH% & "\Bars\Backdrops.bar"
Global CL_AKEL4 = %COMMANDER_PATH% & "\Utilites\AkelPad\AkelPad.exe", CL_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 /V:187 ShowBackColor 1000
# 70000-70050
# первоначальные значения цветов
# 0 - запомнить
# 1 - открыть в редакторе
RegisterCommand 70000 "InitialColors" 1
# регистрация команды для вызова из кнопки (пункта меню)
RegisterCommand 70001 "AutoBackdrop"
# запоминание текущего фона
RegisterCommand 70002 "BackColorBar"
RegisterCommand 70003 "ShowBackdropMenu"
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"
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
# прием сообщения окну "установить значения фона"
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 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
# удержание 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
BACKDROP_THREAD = 0
else
If StartCount = 0 Then InitialColors(0, 0)
BACKDROP_THREAD = 1
# при старте парное значение по умолчанию
ColorItem(0, "Backdrop")
RunThread ThreadBackdrop
StartCount = StartCount + 1
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
#SetHintParam("ShowHint", "Frame", 0xFFFFFF)
ShowHint("Отслеживание значений запущено." & auLF & "Значения в ColorMania / буфере будут применятся к фону панелей.")
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%
# ShowBackHint("Запись " & KeyName & " = " & KeyValue)
SendCommand 2957
SendCommand 2957
EndFunc
Func ThreadBackdrop()
Local h = 0, max = 1*255 + 256*255 + 65536*255, clip, last = 0, w = 0, source
# предыдущие значения фона
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
h = WinFind(0, "TfrmColorPick")
if h > 0 and IsPressed (0x11) then
# текст из ColorMania
# при зажатом CTRL
clip = WinGetText(WinFind(h, "TEdit", 1))
source = "ColorMania"
else
# первая строка в буфере
clip = StrPart(ClipGet(), auLF, 1)
source = "Clipboard"
endif
if IsInt(clip) then
# новое число в диапазоне
if clip >= 0 and clip <= max and not (clip = last) then
WinSetText("Applying color value: " & clip)
If WRITE_COLOR_MODE = 0 Then
WriteBackground(clip, clip)
Else
WriteSingleColor(CL_KEY, clip)
Endif
w = w + 1
last = clip
Sleep(400)
endif
endif
Sleep(250)
WinSetText("Backdrop thread is watching for " & source & " values for " & CF_NAME & "")
Wend
BACKDROP_THREAD = 0
WinSetText("")
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Отслеживание остановлено" & auLF & "Применений фона: " & w)
Sleep(2000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func SetBackGround(nParam)
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
WriteBackground(bkg1, bkg2)
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(25)
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)
SetHintParam("ShowHint", "Font", 10, "Arial")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint(BackHint)
Sleep(1000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func CreateBackdropMenu()
Local i = 0, cf, txt
txt = txt & 'MENUITEM "Фон\tBackdrop", 70004' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & 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
#OutputDebugString("Autorun: i=" & i & " cf=" & cf)
txt = txt & 'MENUITEM "' & cf & '", 700' & 10+i & auCRLF
Wend
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Первоначальные значения секции [Colors]", 70000'
#OutputDebugString(txt)
Return txt
EndFunc
Func ShowBackdropMenu(lParam)
ShowPopupMenu /D /F "CreateBackdropMenu"
EndFunc
Func ColorFilterItem(lParam, wItem)
Local key1, key2, val1, val2
If BACKDROP_THREAD = 0 Then
ShowHint("Функция не доступна когда" & auCR & "Отслеживание цвета не запущено")
Return
Endif
key1 = "ColorFilter" & wItem
key2 = key1 & "Color"
IniRead /R val1 %COMMANDER_INI% "Colors" %"%key1%" ""
IniRead /R val2 %COMMANDER_INI% "Colors" %"%key2%" ""
CF_KEY = key1
CF_COLOR_KEY = key2
CF_NAME = val1
CF_VALUE = val2
CL_KEY = CF_COLOR_KEY
CL_VALUE = CF_VALUE
WRITE_COLOR_MODE = 1
ColorItemChange(CL_VALUE)
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME)
# OutputDebugString(GetState("vars"))
EndFunc
Func ColorItem(lParam, sItem)
Local key, val
If BACKDROP_THREAD = 0 Then
ShowHint("Функция не доступна когда" & auCR & "Отслеживание цвета не запущено")
Return
Endif
# парный однотонный фон BackColor = BackColor2
If sItem = "Backdrop" Then
WRITE_COLOR_MODE = 0
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к Backdrop")
CF_NAME = "Backdrop"
ClipPut(CF_NAME)
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 & "Значения будут применятся к " & key)
# OutputDebugString(GetState("vars"))
EndFunc
# не применять изменения цвета при смене элемента
Func ColorItemChange(ColorText)
Local h
# очистка буфера при смене элемента
ClipPut("")
h = WinFind(0, "TfrmColorPick")
if h > 0 then
# синхронизация текста
WinSetText(ColorText, WinFind(h, "TEdit", 1))
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 |
Для вызова меню код 70003. Я наконец зарезервировал коды до 70050, а то путаница уже с ними была. Теперь можно менять цвет для любого элемента Чтобы избежать неожиданостей, сделал применения цвета только из буфера, но можно менять и в реальном времени, удерживая CTRL, когда открыта ColorMania. Есть очень приятный эффект от такого удерживания, когда фон возвращается к своему значению, если отпустить CTRL, не скопировав значение в буфер. В общем, уже лучше.) Ваш код с копированием кода кнопки я тоже добавил по Alt+Shift
Добавлено спустя 3 минуты:
Loopback
Я чуть позже отвечу.) |
|