Modify

Opened 15 years ago

Closed 15 years ago

#1399 closed Bug (Fixed)

_ColorSetRGB() is returning wrong color value

Reported by: Beege Owned by: Jpm
Milestone: 3.3.7.0 Component: Standard UDFs
Version: 3.3.2.0 Severity: None
Keywords: _ColorSetRGB Cc:

Description

The documentation of function _ColorSetRGB() states that the parameters of the function should be an array of values in the range 0-255 in the order of [RED,GREEN,BLUE], but in the following example, "[255,0,0]" will return blue instead of red and vice versa for [0,0,255].
|

#Include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <Color.au3>

Global $GUI = GUICreate("Form1", 405, 333)
Global $R_Edit = _GUICtrlRichEdit_Create($GUI, "" & @CRLF, 32,  8, 345, 225,$ES_MULTILINE)
GUISetState(@SW_SHOW)
;                   R , G, B
Global $aRed[3] = [255, 0, 0]
Global $aBlue[3] = [0, 0, 255]

_RichEdit_Color_Append($R_Edit,'RED RED RED',  _ColorSetRGB($aRed))
_RichEdit_Color_Append($R_Edit,'BLUE BLUE BLUE', _ColorSetRGB($aBlue))

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			_GUICtrlRichEdit_Destroy($R_Edit)
			Exit
	EndSwitch
WEnd

Func _RichEdit_Color_Append($hRichEdit, $sMsg, $COLORREF)
	_GUICtrlRichEdit_AppendText($hRichEdit, @CRLF & $sMsg)
	_GUICtrlRichEdit_SetSel($hRichEdit, _GUICtrlRichEdit_GetFirstCharPosOnLine($hRichEdit), -1, True)
	_GUICtrlRichEdit_SetCharColor($hRichEdit, $COLORREF)
EndFunc   ;==>_RichEdit_Append

-AutoIt:3.3.2.0 (Os:WIN_7/X86 Language:0409 Keyboard:00000409 Cpu:X64)
|
Fixes could be to reverse the order of the FOR-LOOP in the function or change the documentation to [BLUE,GREEN,RED].

Change History (12)

comment:1 Changed 15 years ago by Beege

Sorry I forgot to state that the description of _ColorSetRGB() is "Returns the RGB color to work with (COLORREF)." And the MSDN says that a COLORREF value must be in hex format 0x00BBGGRR.

comment:2 Changed 15 years ago by Jpm

perfectly right the doc should not have mention COLORREF as under all other function as GUI/Pixel the color is 0x00RRGGBB
We miss a function as _ColorSetCOLOREF or we do a script-breaking inside _GUICtrlRichEdit...() functions to use the standard AutoIt iColor which is 0x00RRGGBB
I prefer to add a new _ColorSetCOLOREF function.
Do you agree?

comment:3 Changed 15 years ago by Beege

Yes I very much agree. I was going to ask for that next. :)

comment:4 Changed 15 years ago by Jon

  • Milestone set to 3.3.3.3
  • Owner changed from Gary to Jon
  • Resolution set to Fixed
  • Status changed from new to closed

Fixed by revision [5567] in version: 3.3.3.3

comment:5 Changed 15 years ago by Jon

Fixed by revision [5568] in version: 3.3.3.3

comment:6 Changed 15 years ago by Jon

  • Resolution Fixed deleted
  • Status changed from closed to reopened

comment:7 Changed 15 years ago by Jon

Not quite sure I follow this. ColorSetRGB is clearly broken. Are we saying that we can't fix it because it's already used in other functions?

comment:8 Changed 15 years ago by Jon

  • Milestone changed from 3.3.3.3 to Future Release

comment:9 Changed 15 years ago by TicketCleanup

  • Milestone Future Release deleted

Automatic ticket cleanup.

comment:10 Changed 15 years ago by Beege

From the searching I did, changing ColorSetRGB() would not effect any other functions. I don't see being used anywhere. Also, I don't even think its possible to make _GUICtrlRichEdit...() functions use standard AutoIt iColor since the MSDN states the value must be COLORREF. Perhaps a function similar in style to _ChooseColor() could be made. One that allows the user to specify what kind of color code value they would like returned. Either RGB Hex,BGR Hex, or COLORREF.
|

;                   R , G, B
Global $aRed[3] = [255, 0, 0]
Global $aBlue[3] = [0, 0, 255]
Global $aPink[3] = [255, 0, 255]

ConsoleWrite('COLORREF Value of Blue = ' & _ColorSetValue($aBlue, 0) & @CRLF);COLORREF
ConsoleWrite('BGR HEX Value of Blue = ' & _ColorSetValue($aBlue, 1) & @CRLF);BGR Hex
ConsoleWrite('RGB HEX Value of Blue = ' & _ColorSetValue($aBlue, 2) & @CRLF & @CRLF);RGB Hex


Func _ColorSetValue($aColor, $iReturn_Type = 0)
	If UBound($aColor) <> 3 Then Return SetError(1, 0, -1) ; invalid array
	For $i = 0 To 2
		If $aColor[$i] < 0 Or $aColor[$i] > 255 Then Return SetError(2, 0, -1);invalad color
	Next
	Switch $iReturn_Type
		Case 0;COLORREF
			Return Dec(Hex($aColor[2], 2) & Hex($aColor[1], 2) & Hex($aColor[0], 2))
		Case 1;BGR HEX CODE
			Return '0x' & Hex($aColor[2], 2) & Hex($aColor[1], 2) & Hex($aColor[0], 2)
		Case 2;RGB HEX CODE
			Return '0x' & Hex($aColor[0], 2) & Hex($aColor[1], 2) & Hex($aColor[2], 2)
		Case Else
			Return SetError(3, 0, -1);invalad return type
	EndSwitch
EndFunc   ;==>_ColorSetValue

comment:11 Changed 15 years ago by Jpm

in fact _ColorSetRGB is coherent with GUI/Pixel functions.
The introduction of a new function with will set as MSDN request is the only way to avoid script-breaking in _GUICtrlRichEdit_...() functions as you mention.
I have a preference to be _ColorSetCOLORREF but why not to have a more general function as _ColorSetValue

comment:12 Changed 15 years ago by Jpm

  • Milestone set to 3.3.7.0
  • Owner changed from Jon to Jpm
  • Resolution set to Fixed
  • Status changed from reopened to closed

Fixed by revision [5811] in version: 3.3.7.0

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.