You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:22:10