尝试通过将OLE_COLOR转换为我可以在Delphi中使用的某个值来重现它。我特别需要重现Outlook OlCategoryColor。我可以把它读成一个整数:例如,黄色给出4641276,但这并不像我能找到的黄色任何等价物。我收集了那个system.drawing有一个colorconverter方法应该可以做到这一点,但我的Delphi版本(10西雅图)似乎没有system.drawing。它似乎在Delphi 7中可用,并且可以通过将.dll添加到项目引用中将其添加到Delphi 8,但是西雅图似乎没有项目引用。一如既往地感谢你。
答案 0 :(得分:1)
ColorToRGB
单元的辅助函数Graphics
从OLE颜色转换为RGB。它只是测试设置的高位,如果是,则调用GetSysColor
传递在其余值中编码的索引。
但是,4641276
的颜色值不是那种形式。在十六进制中,它是$0046D1FC
。这是一个普通的RGB值。
答案 1 :(得分:0)
OLE_COLOR
是$00BBGGRR
格式的4字节RGB颜色。这与COLORREF
使用的格式相同,Delphi的非系统 RGB颜色VCL.Graphics.TColor
使用TColor
使用$800000xx
系统颜色的格式,其中xx
是由Win32 GetSysColor()
函数定义的索引。)
因此,您可以在OLE_COLOR
,COLORREF
和TColor
之间直接自由投射RGB值。将TColor
分配给COLORREF
或OLE_COLOR
时,您应使用VCL的ColorToRGB()
功能确保将TColor
转换为4641276
首先是实际RGB值,以防它保持系统颜色。
话虽这么说,数值$0046D1FC
是十六进制R=252 G=209 B=70
,这是OLE_COLOR
,这是一个金黄色:
更新:显然$800000xx
也支持Vcl.Graphics.TColor
格式,OLE_COLOR
为系统定义的颜色。在这种情况下,在将COLORREF
分配给OLE_COLOR
时,请改用OleTranslateColor()
。您可以在TColor
和.navbar-collapse
之间自由分配值,因为它们对系统颜色和非系统颜色使用相同的格式。