Delphi重现OLE_COLOR

时间:2016-11-13 06:38:03

标签: delphi

尝试通过将OLE_COLOR转换为我可以在Delphi中使用的某个值来重现它。我特别需要重现Outlook OlCategoryColor。我可以把它读成一个整数:例如,黄色给出4641276,但这并不像我能找到的黄色任何等价物。我收集了那个system.drawing有一个colorconverter方法应该可以做到这一点,但我的Delphi版本(10西雅图)似乎没有system.drawing。它似乎在Delphi 7中可用,并且可以通过将.dll添加到项目引用中将其添加到Delphi 8,但是西雅图似乎没有项目引用。一如既往地感谢你。

2 个答案:

答案 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_COLORCOLORREFTColor之间直接自由投射RGB值。将TColor分配给COLORREFOLE_COLOR时,您应使用VCL的ColorToRGB()功能确保将TColor转换为4641276首先是实际RGB值,以防它保持系统颜色。

话虽这么说,数值$0046D1FC是十六进制R=252 G=209 B=70,这是OLE_COLOR,这是一个金黄色:

yellow color

更新:显然$800000xx也支持Vcl.Graphics.TColor格式,OLE_COLOR为系统定义的颜色。在这种情况下,在将COLORREF分配给OLE_COLOR时,请改用OleTranslateColor()。您可以在TColor.navbar-collapse之间自由分配值,因为它们对系统颜色和非系统颜色使用相同的格式。