Delphi:如何修改TControlList中单个项的背景色?
TControlList 实现隔行白灰背景的解决方案
开启自定义绘制模式
首先将TControlList的Style属性设置为csOwnerDraw,只有开启这个模式,自定义绘制事件才会生效。处理
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;补充:绘制项内容
如果需要绘制项的文本、图标等内容,可以在OnDrawItem事件中继续处理,或者直接在OnBeforeDrawItem事件的背景绘制之后添加内容绘制代码,确保内容在背景之上显示。
内容的提问来源于stack exchange,提问作者fisi-pjm
相关产品推荐
相关产品推荐

