Orion9

|
Posted: Thu Dec 05, 2024 01:21 Post subject: |
|
|
Loopback wrote: |
Code: |
Func BigHint(FileName, FieldIndex, UnitIndex)
OutputDebugString(GetState("vars",2))
EndFunc
|
в x64 успешно выводит все три переменные. По 60 раз. Так что это не похоже на проблему с входом в функцию на x64. |
А если вот так:
Code: | Func BigHint(FileName, FieldIndex, UnitIndex)
If IsPressed (0x11) Then OutputDebugString(GetState("vars",2))
EndFunc |
Проблема, похоже, не с функцией BigHint, а с IsPressed. В 32-х битном ТС все нормально.
Loopback wrote: | Надёжнее кнопке послать BM_CLICK : |
Спасибо, работает! Надеялся на ваш совет Самостоятельно вникать так глубоко не приходится, хотя это все интересно, конечно.)
Пожалуй, пора продемонстрировать плоды нелегкого труда Вот теперь работает ближе к тому, как оно должно быть на самом деле, хотя это все эксперементально пока. Небольшая оговорка:
Russian.cedf wrote: | Значения ключей, определяющих цвет, могут быть заданы как в десятичном виде (RGB: красный + 256*зелёный + 65536*синий, каждый компонент из диапазона 0..255), так и в шестнадцатеричном (трёхбайтное число $BBGGRR, где RR, GG и BB задают интенсивность красного, зелёного и синего цветов в диапазоне от 00 до FF).
По умолчанию при диалоговом выборе цвета значение записывается в десятичном формате. Чтобы преобразовать с помощью Configuration Editor выбранное значение из десятичного формата в шестнадцатеричный, нужно сохранить цвет в соответствующем системном диалоге кнопкой OK при нажатой клавише SHIFT. Шестнадцатеричный формат будет использоваться для этого значения и при следующих обращениях к тому же диалогу. (Данная методика поддерживается и для прочих цветовых настроек, особенно важна она для стилевой настройки курсорной рамки в ключах InactiveFocus и SelectionFocus.) Столь же простой способ обратного преобразования шестнадцатеричного формата в десятичный не предусмотрен; вы можете удалить текущее значение ключа и задать нужный цвет заново в другом формате либо взять десятичный аналог шестнадцатеричного значения из какой-то сторонней программы, поддерживающей такие преобразования. |
Пока нет поддержки шестнадцатеричных значений, ключей темного режима и ключей InactiveFocus и SelectionFocus. Стоит отметить, что менять цвета у курсора и всем, что с ним связано - нет так удобно, поскольку окно ТС теряет фокус и изменения не видны в реальном времени. Но все, что касается остального, очень даже неплохо.
Хотел было записать видео, как предлагал jensoto, но подумал, что нет смысла. Все работает сразу и самым наглядным образом. Поток запускается и ждет окна ColorMania или окна стандартного диалога выбора цвета. Клавиши управления работают только в этих окнах, когда они активны. Ctrl - применить цвет. Shift - откатить. Alt - умолчание (-1), ESC - синхронизировать цвет (только для окна ColorMania). Удерживая Ctrl и водя курсором мыши по палитре цветов - изменения отображаются мгновенно. В принципе, это то, о чем я когда-то мечтал, и чего не хватало. Т.ч. действительно Autorun воплощает мечты! )
 Backdrop.aucfg 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
# OutputDebugString('w ' & Color1)
EndFunc
# запись одиночных значений
Func WriteSingleColor(KeyName, KeyValue)
IniWrite /R %COMMANDER_INI% "Colors" %"%KeyName%" %KeyValue%
SendCommand 2957
SendCommand 2957
# OutputDebugString('v ' & KeyName)
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
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 = 0 And IsPressed(0x5B) Then
If IsPressed(0x12) Then
SetPulsar 1
ElseIf IsPressed(0x11) Then
SetPulsar 2
Endif
Return
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
|
 Hidden text Code: | TOTALCMD#BAR#DATA
70001
%COMMANDER_EXE%
Запустить/Остановить|Отслеживание цвета в буфере| |Ctrl - Понижение тонов|Ctrl+Shift - Повышение тонов|Alt - Вернуть первоначальный|Alt+Win - Вернуть предыдущий| |Shift - Показать значения|Alt+Shift - Скопировать в буфер
0
70001
|
 Hidden text Code: | TOTALCMD#BAR#DATA
70040
%COMMANDER_EXE%
Смена фона из Backdrops.bar|Ctrl - Резервные значения фона|Alt (+Shift) - Параметры задержки|Win - Перечитать бар-файл|Win+Alt - Автоповышение тонов|Win+Ctrl - Автопонижение тонов
70040
|
 Backdrops.bar Code: | [Buttonbar]
Buttoncount=10
button1=wcmicons.dll,15
cmd1=%COMMANDER_PATH%\Bars\Main.bar
iconic1=0
button2=%COMMANDER_EXE%
cmd2=70002
iconic2=0
menu2=Сохранить фон
button3=
iconic3=0
button4=%COMMANDER_EXE%
cmd4=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param4=/u- /ef "msg(regmsg(BackColorsMessage), 7566195, 7566195)
iconic4=0
menu4=Избранный фон 1
button5=%COMMANDER_EXE%
cmd5=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param5=/u- /ef "msg(regmsg(BackColorsMessage), 9272934, 9272934)
iconic5=0
menu5=Избранный фон 2
button6=
iconic6=0
button7=%COMMANDER_EXE%
cmd7=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param7=/u- /ef "msg(regmsg(BackColorsMessage), 9865603, 9865603)
iconic7=0
menu7=Фон 9865603, 9865603
button8=%COMMANDER_EXE%
cmd8=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param8=/u- /ef "msg(regmsg(BackColorsMessage), 8483950, 9602431)
iconic8=0
menu8=Фон 8483950, 9602431
button9=%COMMANDER_EXE%
cmd9=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param9=/u- /ef "msg(regmsg(BackColorsMessage), 7895151, 7895151)
iconic9=0
menu9=Фон 7895151, 7895151
button10=%COMMANDER_EXE%
cmd10=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param10=/u- /ef "msg(regmsg(BackColorsMessage), 8552049, 7895151)
iconic10=0
menu10=Фон 8552049, 7895151
|
Там еше кнопка и комбинации для переключения сохраненого фона из бар-файла и пару приятных мелочей, включая статус готовности операций в заголовке. |
|