1 (изменено: Dozilius, 2020-01-06 00:14:25)

Тема: AHK: Изменение цвета Hotkey в GUI

Искал изменение цвета хоткея в гуи, нашёл только изменение цвета edit, пришлось обратится сюда.
Дело в том, что мне нужно заменить стандартный белый цвет https://www.autohotkey.com/docs/static/ctrl_hotkey.png на чёрный (0d0d0d) в моём гуи.
Заранее спасибо!

2

Re: AHK: Изменение цвета Hotkey в GUI

http://forum.script-coding.com/viewtopic.php?id=8104
И точку уберите в названии темы, а то нагорит.

3

Re: AHK: Изменение цвета Hotkey в GUI

По этой ссылке тяжело будет найти. Но даже если покопаться, там есть пример для Edit со стилем ReadOnly, но это не подойдёт для контрола Hotkey, если это вообще возможно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4

Re: AHK: Изменение цвета Hotkey в GUI

У Hotkey фон так просто не изменить. Можно попробовать спрятать Hotkey и сделать Text, который будет дублировать его содержимое. А уже у Text можно изменять фон.

5

Re: AHK: Изменение цвета Hotkey в GUI

Может через NET можно?
https://docs.microsoft.com/en-us/dotnet … _BackColor

6 (изменено: serzh82saratov, 2020-02-18 16:25:49)

Re: AHK: Изменение цвета Hotkey в GUI

Костыль вроде ничего работает.



#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
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui