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, AutoHotkey_L v1.1.30.03 (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-01-12 15:36:13)

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 + ")
	GuiControl, , Text%A_GuiControl%, % str RegExReplace(%A_GuiControl%, "[\+!\^]") 
}

GuiClose() {
    ExitApp
}

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, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui