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

Delphi:如何修改TControlList中单个项的背景色?

TControlList 实现隔行白灰背景的解决方案
  1. 开启自定义绘制模式
    首先将TControlList的Style属性设置为csOwnerDraw,只有开启这个模式,自定义绘制事件才会生效。

  2. 处理OnBeforeDrawItem事件
    你之前操作画布无效的核心原因是没有阻止控件的默认绘制行为。在事件中完成背景绘制后,必须将ADone参数设为True,这样控件就不会用默认样式覆盖你的自定义背景。

    示例代码:

    procedure TYourForm.ControlList1BeforeDrawItem(Sender: TObject; AIndex: Integer;
      ACanvas: TCanvas; ARect: TRect; AState: TCustomControlListItemState;
      var ADone: Boolean);
    begin
      // 按项索引奇偶分配背景色
      if AIndex mod 2 = 0 then
        ACanvas.Brush.Color := clWhite
      else
        ACanvas.Brush.Color := $00E6E6E6; // 自定义浅灰色,也可以用clSilver等系统色
    
      // 填充项的整个矩形区域
      ACanvas.FillRect(ARect);
    
      // 标记已完成背景绘制,跳过默认绘制
      ADone := True;
    end;
    
  3. 补充:绘制项内容
    如果需要绘制项的文本、图标等内容,可以在OnDrawItem事件中继续处理,或者直接在OnBeforeDrawItem事件的背景绘制之后添加内容绘制代码,确保内容在背景之上显示。

内容的提问来源于stack exchange,提问作者fisi-pjm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:32