Delphi VirtualTreeView和VCL样式

Delphi VirtualTreeView和VCL样式,delphi,virtualtreeview,vcl-styles,Delphi,Virtualtreeview,Vcl Styles,我在我的应用程序中使用VirtualTreeView(作为Delphi XE7中的网格),我还选择使用Carbon VCL样式。 出现这个问题是因为我需要根据每行的某些状态给一些行上色,并且字体颜色保持白色,即使我在一行上使用浅色也是如此。因此不可能读取数据。当我使用冰山古典风格时,这个问题不会发生 因此,基本上,我可以根据选择的样式更改我的行集颜色,这是一种解决方案。但是我正在寻找一种根据行颜色背景修改字体颜色的方法 我正在做事件内部的着色代码:BeforeCellPaint,我试图修改字体颜

我在我的应用程序中使用VirtualTreeView(作为Delphi XE7中的网格),我还选择使用Carbon VCL样式。 出现这个问题是因为我需要根据每行的某些状态给一些行上色,并且字体颜色保持白色,即使我在一行上使用浅色也是如此。因此不可能读取数据。当我使用冰山古典风格时,这个问题不会发生

因此,基本上,我可以根据选择的样式更改我的行集颜色,这是一种解决方案。但是我正在寻找一种根据行颜色背景修改字体颜色的方法

我正在做事件内部的着色代码:BeforeCellPaint,我试图修改字体颜色,但没有成功


有什么想法吗?

我找到了一个在这方面很有帮助的图书馆:

// unit for the VCL Styles Utils 
// github.com/RRUZ/vcl-styles-utils 

TargetCanvas.Brush.Color := aColor; 
if TStyleManager.ActiveStyle.Name = 'Carbon' then
   TCustomStyleExt(TStyleManager.ActiveStyle).SetStyleFontColor(sfTreeItemTextNorma‌​l, clBlack) 
else
   TCustomStyleExt(TStyleManager.ActiveStyle).SetStyleFontColor(sfTreeItemTextNorma‌​l, aFontColor); 
TargetCanvas.FillRect(CellRect); 
用这个我可以改变字体颜色


Laurent

请发布您的着色代码。顺便说一句,我发现了一个库,在这个主题上有很多帮助://VCL样式的单位Utils//TargetCanvas.Brush.Color:=aColor;如果TStyleManager.ActiveStyle.Name='Carbon',则TCustomStyleExt(TStyleManager.ActiveStyle).SetStyleFontColor(StreeItemTextNormal,clBlack)或TCustomStyleExt(TStyleManager.ActiveStyle).SetStyleFontColor(StreeItemTextNormal,aFontColor);TargetCanvas.FillRect(CellRect);有了这个,我可以改变字体颜色。作为答案发布:-)根据背景选择浅色或深色字体颜色的算法,请参见此问题: