Что нового

Цвет текста в Label

VadimKHL

Новичок
Сообщения
155
Репутация
0
Подскажите, как определить какой текущий цвет текста в Label?
После кучи выполнений GUICtrlSetColor, нужно определить какой сейчас установлен.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Когда то давно Yashied задавал подобный вопрос на официальном форуме
Код:
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>
Global $WINDOW_TO_QUERY, $___RGB
GUIRegisterMsg($WM_CTLCOLORSTATIC,"MY_CTLCOLOR")
GUIRegisterMsg($WM_CTLCOLOREDIT,"MY_CTLCOLOR")
GUIRegisterMsg($WM_CTLCOLORBTN,"MY_CTLCOLOR")

GUICreate('Test', 200, 200)

$Input = GUICtrlCreateInput('Simple text', 20, 20, 160, 20)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xFAFAFA)
GUISetState()

MsgBox(0, '', '0x' & Hex(_WinAPI_GetTextColor(GUICtrlGetHandle($Input))))

func _WinAPI_GetTextColor($hWnd)
    ; Prog@ndy
    Global $___RGB = -1
    $WINDOW_TO_QUERY = $hWnd
    _WinAPI_RedrawWindow($hWnd,0,0,$RDW_INVALIDATE+$RDW_UPDATENOW)
    Do 
        Sleep(10)
    Until $___RGB <> -1
    Return $___RGB
    
endfunc; _WinAPI_GetTextColor

Func MY_CTLCOLOR($hWnd,$uMsg,$wParam, $lParam)
    ; Prog@ndy
    If $lParam = $WINDOW_TO_QUERY Then
        Local $RGB = DllCall('gdi32.dll', 'int', 'GetTextColor', 'ptr', $wParam)
        If Not @error Then 
            Global $___RGB = $RGB[0]
        Else
            Global  $___RGB = -2
        EndIf
    EndIf
        Return 'GUI_RUNDEFMSG'
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
VadimKHL
даже велосипед не нужно изобретать. нужна глобальная переменная, которая хранит инфу о последнем\текущем цвете. можно хранить десятки изменений в массиве
 
Автор
V

VadimKHL

Новичок
Сообщения
155
Репутация
0
Всем спасибо за ответы и помощь! :beer:


Добавлено:
Сообщение автоматически объединено:

А почему первый пример не работает? Выдает 0x000000
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
VadimKHL
потому, что это пример
адекватный способ, это сохранять свои данные. так будет надежнее

если нужен пример, то так
Код:
#include <WinAPIGdi.au3>
GUICreate('Test', 200, 200)

$Input = GUICtrlCreateInput('Simple text', 20, 20, 160, 20)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xFAFAFA)
GUISetState()

MsgBox(0, '', '0x' & Hex(_WinAPI_GetTextColor(GUICtrlGetHandle($Input))))
 
Автор
V

VadimKHL

Новичок
Сообщения
155
Репутация
0
))) Тоже не работает
Показывает FFFFFF
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $aLabel_Color[1][2]

$hGUI = GUICreate('Test')

$iLabel1 = GUICtrlCreateLabel('My Colored label 1', 20, 20, 200, 20)
_GUICtrlSetColor($iLabel1, 0x0000FF)

$iLabel2 = GUICtrlCreateLabel('My Colored label 2', 20, 40, 200, 20)
_GUICtrlSetColor($iLabel2, 0xFF0000)

GUISetState(@SW_SHOW, $hGUI)

MsgBox(64, 'Color 1', _GUICtrlGetColor($iLabel1), 0, $hGUI)
MsgBox(64, 'Color 2', _GUICtrlGetColor($iLabel2), 0, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GUICtrlGetColor($iCtrlID)
	For $i = 1 To $aLabel_Color[0][0]
		If $iCtrlID = $aLabel_Color[$i][0] Then
			Return '0x' & Hex($aLabel_Color[$i][1], 6)
		EndIf
	Next
	
	Return SetError(1, 0, -1)
EndFunc

Func _GUICtrlSetColor($iCtrlID, $iColor)
	$aLabel_Color[0][0] += 1
	ReDim $aLabel_Color[$aLabel_Color[0][0] + 1][2]
	
	$aLabel_Color[$aLabel_Color[0][0]][0] = $iCtrlID
	$aLabel_Color[$aLabel_Color[0][0]][1] = $iColor
	
	GUICtrlSetColor($iCtrlID, $iColor)
EndFunc
 
Автор
V

VadimKHL

Новичок
Сообщения
155
Репутация
0
Всем спасибо!
Сделал с глобальной переменной.
 
Верх