Что нового

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

VadimKHL

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

Medic84

Омега
Команда форума
Администратор
Сообщения
1 499
Репутация
317
Когда то давно 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)
    ; [email protected]
    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)
    ; [email protected]
    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

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

VadimKHL

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


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

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

joiner

Модератор
Локальный модератор
Сообщения
2 993
Репутация
501
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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 124
Репутация
2 322
Код:
#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

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