如何以不同的颜色绘制选定的列表框项?

时间:2011-12-19 15:27:07

标签: delphi listbox ownerdrawn

是否可以在TListBox中更改项目选择焦点颜色和文本颜色?

如果项目中没有启用主题,或者列表框样式设置为owner-draw,则项目周围的选项将显示为蓝色,我认为这是由系统的外观设置全局定义的。

我想将所选项目的颜色更改为自定义颜色。

举个例子,结果是这样的:

enter image description here

请注意,在Paint中修改了最后一个列表框以说明示例。

3 个答案:

答案 0 :(得分:19)

试试这个:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    if odSelected in State then
      Brush.Color := $00FFD2A6;

    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
    if odFocused In State then begin
      Brush.Color := ListBox1.Color;
      DrawFocusRect(Rect);
    end;
  end;
end;

答案 1 :(得分:1)

我看到,Style属性必须是lbOwnerDrawFixed

答案 2 :(得分:0)

这帮助我完成了我还需要做的事情,即消除了任何可见的选择。我对上面的代码进行了少许修改以实现此目的:

procedure TForm1.OnDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    if odSelected in State then
    begin
      Brush.Color := clWhite;
      Font.Color := clBlack;
    end;

    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
    if odFocused In State then begin
      Brush.Color := ListBox1.Color;
      DrawFocusRect(Rect);
    end;
  end;
end;

将所选项目的背景颜色设为白色,将字体颜色设为黑色,这正是我需要的。非常感谢!