DrawItem 上的 ComboBox 不适用于悬停

问题描述 投票:0回答:1

如果关联的对象具有特定值,我希望组合框项更改颜色。 我做了以下事情:

with Control as TComboBox do
  begin
     Canvas.Font.Color:=clBlack;
     Canvas.Brush.Color := clWhite ;
     if TMyObj(MyCb.Items.Objects[MyCb.ItemIndex]).C = 'C' then
        Canvas.Brush.Color := clred ;
     Canvas.FillRect(Rect);
     Canvas.TextOut(Rect.Left, Rect.Top, Items[Index])
 end;

我可以看到所有组合项目都是白底黑字。当我用鼠标悬停时,我悬停的所有项目都被涂成红色(即使 C 值不是“C”

你明白为什么吗?

delphi combobox
1个回答
4
投票

是的。您根据 ItemIndex 重复设置颜色,该颜色在项目的绘制过程中不会更改。您应该使用调用该方法时提供的

Index
作为参数之一。

with Control as TComboBox do
begin
  Canvas.Font.Color := clBlack;
  Canvas.Brush.Color := clWhite ;
  if TMyObj(Control.Items.Objects[Index]).C = 'C' then // Change this line
    Canvas.Brush.Color := clred ;
  Canvas.FillRect(Rect);
  Canvas.TextOut(Rect.Left, Rect.Top, Items[Index])
end;   
© www.soinside.com 2019 - 2024. All rights reserved.