Тема: AHK: Часы. Прозрачность с включенным и отключенным фоном
Добрый день всем!
Переписал старый скрипт часов, но есть одна проблема:
в момент регулирования прозрачности часов (это из меню "Другие настройки" в трее) включается их фон, если он отключен. Но самое противное, что при отключении фона и прозрачность часов отключается.
С включенным фоном все работает корректно.
Нужна регулировка прозрачности как при включенном, так и при отключенном фоне часов и желательно с одного Slider.
Посоветуйте решение.
Скрипт часов:
#NoEnv
#Persistent
#SingleInstance force
SendMode Input
DetectHiddenWindows on
SetTitleMatchMode 2
ProgName := "Screen Big Ben"
If !FileExist(A_ScriptDir "\Images\Close.png") {
FileCreateDir % A_ScriptDir "\Images"
FileInstall Images\Close.png, % A_ScriptDir "\Images\Close.png", 1
}
CloseImg := A_ScriptDir "\Images\Close.png"
RegRead AutoLaunch, HKCU, Software\Microsoft\Windows\CurrentVersion\Run, % ProgName
RegRead ThroughStatus, HKCU, % "Software\" ProgName, Click Through
RegRead OnTop, HKCU, % "Software\" ProgName, Always OnTop
RegRead LockPos, HKCU, % "Software\" ProgName, Lock Position
RegRead BackStatus, HKCU, % "Software\" ProgName, Show Background
If ErrorLevel {
BackStatus := "1"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Background, % BackStatus
}
RegRead DateStatus, HKCU, % "Software\" ProgName, Show Date
If ErrorLevel {
DateStatus := "1"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Date, % DateStatus
}
RegRead PosX, HKCU, % "Software\" ProgName, Position-X
If ErrorLevel {
PosX := "10"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Position-X, % PosX
}
RegRead PosY, HKCU, % "Software\" ProgName, Position-Y
If ErrorLevel {
PosY := "10"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Position-Y, % PosY
}
RegRead TimeClr, HKCU, % "Software\" ProgName, Time Color
If ErrorLevel {
TimeClr := "00FFFF" ;"00FF00"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Time Color, % TimeClr
}
RegRead DateClr, HKCU, % "Software\" ProgName, Date Color
If ErrorLevel {
DateClr := "00FFFF" ;"00FF00"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Date Color, % DateClr
}
RegRead BackClr, HKCU, % "Software\" ProgName, Background Color
If ErrorLevel {
BackClr := "000000"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Background Color, % BackClr
}
RegRead TransValue, HKCU, % "Software\" ProgName, Transparency
If ErrorLevel {
TransValue := "255"
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Transparency, % TransValue
}
;______________________________ Clock Gui ______________________________
BackTimeSize := "w416 h80" ; размер фона часов без даты
BackDateSize := "w416 h242" ; размер фона часов с датой
BigBenCorn := "R20-20 0-0" ; размер углов Gui
TimeTxtSize := "w416 h80" ; размер текста часов
DateTxtSize := "w416" ; размер текста даты
TimeTxtPos := "x0 y-10 Center" ; расположение строк часов: 1.начало строки от левого края Gui 2.расстояние между строк
DateTxtPos := "x0 y+10 Center" ; расположение строк даты
TimeFontName := "Cambria" ; название шрифта часов
DateFontName := "Comic Sans MS" ; название шрифта даты
TimeFont := "60 Bold" ; шрифт часов
DateFont := "40 Norm" ; шрифт даты
;GuiLogo := "D:\Storage\The rest\Images\Pictures\Paul.jpg"
Gui BigBen: +LastFound +ToolWindow -Caption
Gui BigBen: Color, % BackClr
Gui BigBen: Font, % "c" TimeClr " s" TimeFont, % TimeFontName
Gui BigBen: Add, Text, % TimeTxtSize " " TimeTxtPos " vTime gMove", % A_Hour " : " A_Min " : " A_Sec
Gui BigBen: Font, % "c" DateClr " s" DateFont, % DateFontName
Gui BigBen: Add, Text, % DateTxtSize " " DateTxtPos " vData", % A_DD " " A_MMMM "`n" A_DDDD
Gui BigBen: Show, % "x" PosX " y" PosY " " BackDateSize, % ProgName
;Gui Add, Picture, % BackDateSize " x-0 y-0", % GuiLogo ; фоновый рисунок Gui
WinSet Region, % BackTimeSize " " BigBenCorn, % ProgName
If (BackStatus = 1) {
WinSet Transparent, % TransValue, % ProgName
}
Else {
WinSet TransColor, % BackClr " " TransValue, % ProgName
}
SetTimer TicTac, 1000
;______________________________ TrayMenu _______________________________
Menu Tray, Tip, % ProgName
Menu Tray, NoStandard
Menu Tray, Add, Автозапуск с Windows, SwitchAutoLaunch
Menu Tray, Add, Всегда сверху, SetOnTop
Menu Tray, Add, Прозрачность для мыши, ClickThrough
Menu Tray, Add, Не запоминать положение, LockPosition
Menu Tray, Add, Сохранить текущее положение, SavePos
Menu Tray, Add, Дата и день недели, SwitchTimeDate
Menu Tray, Add, Фон часов, SwitchBackground
Menu Tray, Add ; разделитель
Menu Tray, Add, Другие настройки, Config
Menu Tray, Add ; разделитель
Menu Tray, Add, Скрыть/Показать часы, ToggleHide
Menu Tray, Add ; разделитель
Menu Tray, Add, О программе, About
Menu Tray, Add, Выход, CloseProg
Menu Tray, Default, Выход
;______________________ Проверка флагов TrayMenu _______________________
If AutoLaunch {
Menu Tray, Check, Автозапуск с Windows
}
If LockPos {
Menu Tray, Check, Не запоминать положение
}
If BackStatus {
WinSet Transparent, % TransValue, % ProgName
Menu Tray, Check, Фон часов
}
If DateStatus {
WinSet Region, % BackDateSize " " BigBenCorn, % ProgName
Menu Tray, Check, Дата и день недели
}
If ThroughStatus {
Gui BigBen: +E0x20
Menu Tray, Check, Прозрачность для мыши
}
If OnTop {
WinSet AlwaysOnTop, On, % ProgName
Menu Tray, Check, Всегда сверху
}
;__________________________ Set transparency ___________________________
#IfWinActive Screen Big Ben
{
!Up::
If (TransValue <= 255) {
TransValue += 5
If (TransValue > 255) {
TransValue = 255
}
If (BackStatus = 1) {
WinSet Transparent, % TransValue, % ProgName
}
Else {
WinSet TransColor, % BackClr " " TransValue, % ProgName
}
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Transparency, % TransValue
Return
}
!Down::
If (TransValue >= 55) {
TransValue -= 5
If (TransValue < 55) {
TransValue = 55
}
If (BackStatus = 1) {
WinSet Transparent, % TransValue, % ProgName
}
Else {
WinSet TransColor, % BackClr " " TransValue, % ProgName
}
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Transparency, % TransValue
Return
}
Return
}
;_________________________ Enable window drag __________________________
Move:
PostMessage 0xA1, 2,,, A
If (A_GuiEvent = DoubleClick) {
GoSub ShowHideClock
}
Return
;________________________________ Clock ________________________________
TicTac:
GuiControl BigBen:, Time, % A_Hour " : " A_Min " : " A_Sec
GuiControl BigBen:, Data, % A_DD " " A_MMMM "`n" A_DDDD
Return
;___________________________ Show/hide clock ___________________________
ShowHideClock:
ToggleHide:
Toggle := !Toggle
If Toggle {
WinHide % ProgName
}
Else {
WinShow % ProgName
}
Return
;_________________________ Don't save position _________________________
LockPosition:
If LockPos {
LockPos := ""
Menu Tray, UnCheck, Не запоминать положение
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Lock Position, 0
}
Else {
LockPos := "1"
Menu Tray, Check, Не запоминать положение
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Lock Position, 1
GoSub SavePos
}
Return
;____________________________ Settings Gui _____________________________
Config:
CnfID := "Big Ben Settings"
CnfSize := "w300 h274"
CnfCorn := "R14-14 0-0" ; размер углов Gui
CnfTrans := "220" ; от 0 (невидимо) до 255 (без прозрачности)
CnfClr := "c000000" ; цвет Gui
CnfFontName := "Comic Sans MS" ; название шрифта
CnfFont := "s14 Bold" ; размер шрифта Gui
CnfFontClr := "c00FFFF"
CnfTxtPos := "x40 yp30" ; расположение строк: 1.начало строки от левого края Gui 2.расстояние между строк
CnfPrgrSize := "w30 h30" ; размер Progress (квадрат с цветом элемента)
CnfPrgrPos := "x234 yp0 Border" ; расположение Progress
Gui Cnf: +AlwaysOnTop +ToolWindow -Caption
Gui Cnf: Color, % CnfClr
Gui Cnf: Font, % "s12 Bold " CnfFontClr, % CnfFontName
Gui Cnf: Add, Text, x20 y20 w240 gMove, % ProgName " - Настройки" ; первая строка
Gui Cnf: Add, Picture, x260 yp0 w20 h20 BackgroundTrans gCloseCnf, % CloseImg
Gui Cnf: Font, % CnfFont " " CnfFontClr, % CnfFontName
Gui Cnf: Add, GroupBox, x20 y50 w260 h134 Center, Цвет
Gui Cnf: Add, Text, % CnfTxtPos, Цвет часов
Gui Cnf: Add, Progress, % CnfPrgrSize " " CnfPrgrPos " Background" TimeClr " vTimeClrBtn"
Gui Cnf: Add, Text, % CnfTxtPos, Цвет даты
Gui Cnf: Add, Progress, % CnfPrgrSize " " CnfPrgrPos " Background" DateClr " vDateClrBtn"
Gui Cnf: Add, Text, % CnfTxtPos, Цвет фона
Gui Cnf: Add, Progress, % CnfPrgrSize " " CnfPrgrPos " Background" BackClr " vBackClrBtn"
Gui Cnf: Add, GroupBox, x20 yp52 w260 h59 Center, Прозрачность
Gui Cnf: Add, Slider, x22 yp26 w256 h26 Range15-255 vTransValue gSetTransparency, % TransValue
Gui Cnf: Show, % CnfSize, % CnfID
WinSet Region, % CnfSize " " CnfCorn, % CnfID
WinSet Transparent, % CnfTrans, % CnfID
OnMessage(0x201, "WM_LBUTTONDOWN")
Return
WM_LBUTTONDOWN() {
If (A_GuiControl = "TimeClrBtn") {
GoSub TimeClrSet
}
Else if (A_GuiControl = "DateClrBtn") {
GoSub DateClrSet
}
Else if (A_GuiControl = "BackClrBtn") {
GoSub BackClrSet
}
}
CloseCnf:
Gui Cnf: Destroy
Return
;___________________________ Set clock color ___________________________
TimeClrSet:
TimeClr := ChooseColor()
If TimeClr <>
{
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Time Color, % TimeClr
Gui BigBen: Font, % "c" TimeClr " s" TimeFont, % TimeFontName
GuiControl BigBen: Font, Time
GuiControl % "Cnf: +Background" TimeClr , TimeClrBtn
}
Return
;___________________________ Set date color ____________________________
DateClrSet:
DateClr := ChooseColor()
If DateClr <>
{
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Date Color, % DateClr
Gui BigBen: Font, % "c" DateClr " s" DateFont, % DateFontName
GuiControl BigBen: Font, Data
GuiControl % "Cnf: +Background" DateClr , DateClrBtn
}
Return
;_____________________ Set clock background color ______________________
BackClrSet:
BackClr := ChooseColor()
If BackClr <>
{
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Background Color, % BackClr
Gui BigBen: Color, % BackClr
GuiControl % "Cnf: +Background" BackClr , BackClrBtn
}
Return
;__________________________ Set transparency ___________________________
SetTransparency:
If (BackStatus = 1) {
WinSet Transparent, % TransValue, % ProgName
}
Else {
WinSet TransColor, % BackClr " " TransValue, % ProgName
}
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Transparency, % TransValue
Return
;___________________________ Set AlwaysOnTop ___________________________
SetOnTop:
If OnTop {
OnTop := ""
WinSet AlwaysOnTop, Off, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Always OnTop, 0
Menu Tray, UnCheck, Всегда сверху
}
Else {
OnTop := "1"
WinSet AlwaysOnTop, On, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Always OnTop, 1
Menu Tray, Check, Всегда сверху
}
Return
;____________________ Show/hide day of month & week ____________________
SwitchTimeDate:
If DateStatus {
DateStatus := ""
WinSet Region, % BackTimeSize " " BigBenCorn, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Date, 0
Menu Tray, UnCheck, Дата и день недели
}
Else {
DateStatus := "1"
WinSet Region, % BackDateSize " " BigBenCorn, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Date, 1
Menu Tray, Check, Дата и день недели
}
Return
;____________________ Show/hide background of clock ____________________
SwitchBackground:
If BackStatus {
BackStatus := ""
WinSet TransColor, % BackClr " " TransValue, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Background, 0
Menu Tray, UnCheck, Фон часов
}
Else {
BackStatus := "1"
WinSet Transparent, % TransValue, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Show Background, 1
Menu Tray, Check, Фон часов
}
Return
;_______________________ AutoLaunch with Windows _______________________
SwitchAutoLaunch:
If AutoLaunch {
AutoLaunch := ""
RegDelete HKCU, Software\Microsoft\Windows\CurrentVersion\Run, % ProgName
Menu Tray, UnCheck, Автозапуск с Windows
}
Else {
AutoLaunch := """" A_ScriptFullPath """"
RegWrite REG_SZ, HKCU, Software\Microsoft\Windows\CurrentVersion\Run, % ProgName, % AutoLaunch
Menu Tray, Check, Автозапуск с Windows
}
Return
;________________________________ Exit _________________________________
CloseProg:
If LockPos <>
{
GoSub SavePos
}
ExitApp
;_________________________ Save clock position _________________________
SavePos:
WinGetPos PosX, PosY,,, % ProgName
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Position-X, % PosX
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Position-Y, % PosY
Return
;_____________________ Click through clock window ______________________
ClickThrough:
ThroughStatus := !ThroughStatus
If ThroughStatus {
Gui BigBen: +E0x20
Menu Tray, ToggleCheck, Прозрачность для мыши
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Click Through, % ThroughStatus
}
Else {
Gui BigBen: -E0x20
Menu tray, ToggleCheck, Прозрачность для мыши
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Click Through, % ThroughStatus
}
Return
;_______________________________________________________________________
ChooseColor(Color = 0x0, hWnd = 0x0, Flags = 0x2) { ; CC_FULLOPEN := 0x2
VarSetCapacity(CC, 36+64, 0), NumPut(36, CC), NumPut(hWnd, CC, 4), NumPut(Color, CC, 12)
NumPut(&CC+36, CC, 16), NumPut(Flags, CC, 20), DllCall("comdlg32\ChooseColorA", Str, CC)
Hex := "123456789ABCDEF0", RGB := &CC+11
Loop 3 {
HexColorCode .= SubStr(Hex, (*++RGB >> 4), 1) SubStr(Hex, (*RGB & 15), 1)
}
Return HexColorCode
}
;________________________________ About ________________________________
About:
MsgBox 0x40, % ProgName, Hotkeys для управления прозрачностью: Alt+Up и Alt+Down`n`nПримечание: необходимо активировать окно часов.`n`nCopyright © 2016 freeZer0K. All rights reserved.
Return