如何获取vsIcon模式下TListView的选中高亮样式颜色?
获取VCL样式下TListView(vsIcon模式)的选中高亮颜色
要获取图中那种蓝绿色的选中高亮颜色,不能直接通过全局Style Colors设置,得从当前激活的VCL样式里提取对应ListView元素的颜色值,具体实现如下:
- 先确保引用
Vcl.Styles.Utils.StyleHook和Vcl.Styles.Utils.Graphics单元 - 通过
TStyleManager.ActiveStyle获取当前应用的激活样式 - 定位到ListView选中项对应的样式元素
lvseSelectedItem(如果是鼠标悬停的高亮则用lvseHotItem) - 从该元素的Fill属性中提取颜色(优先取纯色,无纯色则取渐变的第一个颜色)
示例代码:
uses Vcl.Styles.Utils.StyleHook, Vcl.Styles.Utils.Graphics; function GetListViewSelectedHighlightColor: TColor; var ActiveStyle: TCustomStyle; ListViewElement: TStyleElement; begin // 默认设为系统高亮色 Result := clHighlight; ActiveStyle := TStyleManager.ActiveStyle; if Assigned(ActiveStyle) then begin // 获取ListView选中项的样式元素 ListViewElement := ActiveStyle.GetStyleElement(tsListView, lvseSelectedItem); if Assigned(ListViewElement) then begin // 提取纯色填充颜色 if ListViewElement.Fill.Color <> TColorRec.Null then Result := ListViewElement.Fill.Color // 渐变填充则取第一个渐变颜色 else if Assigned(ListViewElement.Fill.Gradient) and (ListViewElement.Fill.Gradient.ColorCount > 0) then Result := ListViewElement.Fill.Gradient.Colors[0]; end; end; end;
如果需要的是鼠标悬停时的蓝绿色高亮,把代码里的lvseSelectedItem替换成lvseHotItem就行。
这种方法直接从VCL样式定义中提取颜色,和你图里显示的样式完全匹配,因为VCL样式会自动根据视图模式(包括vsIcon)应用对应的元素样式。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

