是否可以在TListBox中更改项目选择焦点颜色和文本颜色?
如果项目中没有启用主题,或者列表框样式设置为owner-draw,则项目周围的选项将显示为蓝色,我认为这是由系统的外观设置全局定义的。
我想将所选项目的颜色更改为自定义颜色。
举个例子,结果是这样的:
请注意,在Paint中修改了最后一个列表框以说明示例。
答案 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;
将所选项目的背景颜色设为白色,将字体颜色设为黑色,这正是我需要的。非常感谢!