Тема: AHK: Изменение цвета Hotkey в GUI
Искал изменение цвета хоткея в гуи, нашёл только изменение цвета edit, пришлось обратится сюда.
Дело в том, что мне нужно заменить стандартный белый цвет на чёрный (0d0d0d) в моём гуи.
Заранее спасибо!
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Искал изменение цвета хоткея в гуи, нашёл только изменение цвета edit, пришлось обратится сюда.
Дело в том, что мне нужно заменить стандартный белый цвет на чёрный (0d0d0d) в моём гуи.
Заранее спасибо!
http://forum.script-coding.com/viewtopic.php?id=8104
И точку уберите в названии темы, а то нагорит.
По этой ссылке тяжело будет найти. Но даже если покопаться, там есть пример для Edit со стилем ReadOnly, но это не подойдёт для контрола Hotkey, если это вообще возможно.
У Hotkey фон так просто не изменить. Можно попробовать спрятать Hotkey и сделать Text, который будет дублировать его содержимое. А уже у Text можно изменять фон.
Может через NET можно?
https://docs.microsoft.com/en-us/dotnet … _BackColor
Костыль вроде ничего работает.
#NoEnv
#SingleInstance Force
Gui, Font, s16, Comic Sans MS
Gui, Add, Text, Center hwndhText1 gText vTextHotkey1 w222, Нет
Gui, Add, Text, Center hwndhText2 gText vTextHotkey2 wp, Нет
Gui, Add, Hotkey, vHotkey1 gHotkey w0 h0
Gui, Add, Hotkey, vHotkey2 gHotkey wp hp
SetStaticColor(hText1, 0x0000FF, 0xFFFFFF)
SetStaticColor(hText2, 0d0d0d, 0xFFFFFF)
Gui, Show
Return
Text() {
GuiControl, Focus, % SubStr(A_GuiControl, 5)
}
Hotkey() {
Instr(%A_GuiControl%, "^") && (str .= "Ctrl + ")
Instr(%A_GuiControl%, "+") && (str .= "Shift + ")
Instr(%A_GuiControl%, "!") && (str .= "Alt + ")
HK := str RegExReplace(Format("{:U}", %A_GuiControl%), "[\+!\^]")
GuiControl, , Text%A_GuiControl%, % HK = "" ? "Нет" : HK
}
GuiClose() {
ExitApp
}
; http://forum.script-coding.com/viewtopic.php?pid=101917#p101917
SetStaticColor(hStatic, b_color, f_color)
{
static arr := [], GWL_WNDPROC := -4
hGui := DllCall("GetParent", Ptr, hStatic, Ptr)
if !arr.HasKey(hGui) {
arr[hGui] := {}, arr[hGui].Statics := []
arr[hGui].ProcOld := DllCall("SetWindowLong" . (A_PtrSize = 8 ? "Ptr" : ""), Ptr, hGui, Int, GWL_WNDPROC
, Ptr, RegisterCallback("WindowProc", "", 4, Object(arr[hGui])), Ptr)
}
else if arr[hGui].Statics.HasKey(hStatic)
DllCall("DeleteObject", Ptr, arr[hGui].Statics[hStatic].hBrush)
arr[hGui].Statics[hStatic] := { b_color: Rgb2Bgr(b_color), f_color: Rgb2Bgr(f_color)
, hBrush: DllCall("CreateSolidBrush", UInt, Rgb2Bgr(b_color), Ptr) }
WinSet, Redraw,, ahk_id %hGui%
}
WindowProc(hwnd, uMsg, wParam, lParam)
{
Critical
static WM_CTLCOLORSTATIC := 0x138
obj := Object(A_EventInfo)
if (uMsg = WM_CTLCOLORSTATIC && k := obj.Statics[lParam]) {
DllCall("SetBkColor", Ptr, wParam, UInt, k.b_color)
DllCall("SetTextColor", Ptr, wParam, UInt, k.f_color)
Return k.hBrush
}
Return DllCall("CallWindowProc", Ptr, obj.ProcOld, Ptr, hwnd, UInt, uMsg, Ptr, wParam, Ptr, lParam)
}
Rgb2Bgr(color)
{
Return (color & 0xff) << 16 | ((color >> 8) & 0xff) << 8 | color >> 16
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться