1

Тема: AHK: Изменить цвет текста GUI Static

Доброе утро!

Создаю GUI с текстовым элементом, нужно поменять цвет текста с черного на красный.
Есть рабочий пример? Копал send message 0x0138, но, извиняюсь, хрен там, просто не работает и все тут!
Не так это просто, как кажется на первый взгляд.

2

Re: AHK: Изменить цвет текста GUI Static

Если нужно, чтобы текст был изначально другого цвета, тогда так:

Gui, Font, s24
Gui, Add, Text, cRed, Hello, World!
Gui, Show

Если менять потом:

Gui, Font, s24
Gui, Add, Text, vMyText, Hello, World!
Gui, Show

Loop 3 {
   Sleep, 500
   Gui, Font, cRed
   GuiControl, Font, MyText
   Sleep, 500
   Gui, Font, cDefault
   GuiControl, Font, MyText
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Изменить цвет текста GUI Static

Спасибо.

Я работаю со старым кодом, там текст был добавлен через прогрессбар, сам прогрессбар цвет меняю через сэндмесседж и это работает, впрочем, лучше код:


#Persistent
#SingleInstance, force

Progress, 8:C11 ZH20 WM400 WS600  CT00FF00 CWFFFF00 Hide, sub text, header text
Progress, 8:69
Progress, 8:SHOW

И, кстати, вопрос, progress 8 за что отвечает, не нашел документацию?

4

Re: AHK: Изменить цвет текста GUI Static

А как это связано с заголовком темы?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Изменить цвет текста GUI Static

Связано так, что тексты, добавленные таким образом как коде, если просмотреть через ahkspy, классифицируются как static.

6

Re: AHK: Изменить цвет текста GUI Static

Тогда немного посложнее:

Progress, CTGray CBBlue, % " ", Installing..., Draft Installation

Loop, Files, %A_WinDir%\system32\*.*
{
   Progress, % A_Index, % A_LoopFileName, Installing..., Draft Installation
   if !hStatic
      ControlGet, hStatic, hwnd,, Static1, Draft Installation ahk_class AutoHotkey2
   if (A_Index = 20)
      StaticColor.Set(hStatic,, 0x88AAFF)
   if (A_Index = 50)
      StaticColor.Set(hStatic,, 0xDD00)
   if (A_Index = 75)
      StaticColor.Set(hStatic,, 0xBBAA00)
   Sleep, 50
} until A_Index = 100

StaticColor.Set(hStatic)
Progress,,, Complete!
Sleep, 1000
ExitApp

class StaticColor
{
   static arr := [], WM_CTLCOLORSTATIC := ObjBindMethod(StaticColor, "_WM_CTLCOLORSTATIC")
        
   Set(hStatic, b_color := "", f_color := "") {
      if (b_color = "" && f_color = "")
         this.arr.Delete(hStatic), ( !this.arr.Count() && init := 0 )
      else {
         ( !this.arr.Count() && init := 1 )
         for k, v in ["b", "f"]
            %v%_color := %v%_color >> 16 | %v%_color & 0xFF00 | (%v%_color & 0xFF) << 16
         this.arr[hStatic] := {b: b_color, f: f_color}
      }
      ( init != "" && OnMessage(0x138, this.WM_CTLCOLORSTATIC, init) )
      DllCall("InvalidateRect", "Ptr", hStatic, "Ptr", 0, "Int", true)
   }
   
   _WM_CTLCOLORSTATIC(wp, lp) {
      static TRANSPARENT := 1, NULL_BRUSH := 5, DC_BRUSH := 18
      if !clr := this.arr[lp]
         Return
      ( clr.f != "" && DllCall("SetTextColor", "Ptr", wp, "UInt", clr.f) )
      if (clr.b = "")
         DllCall("SetBkMode", "Ptr", wp, "UInt", TRANSPARENT)
      else {
         DllCall("SetBkColor", "Ptr", wp, "UInt", clr.b)
         DllCall("SetDCBrushColor", "Ptr", wp, "UInt", clr.b)
      }
      Return DllCall("GetStockObject", "UInt", clr.b = "" ? NULL_BRUSH : DC_BRUSH, "Ptr")
   }
}
Шикарная услуга плана пишет:

progress 8 за что отвечает, не нашел документацию?

Читайте здесь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Изменить цвет текста GUI Static

Спасибо Тебе БОЛЬШОЕ!