您的位置:首页 > 其它

TListbox中的item根据内容显示不同颜色的方法

2015-12-20 16:34 459 查看
ListBox1 的 Style 属性改为 lbOwnerDrawVariable

在ListBox的OnDrawItem事件裡,根据item的值,改变Canvas属性

procedure TForm2.ListBox1DrawItem(Control: TWinControl; Index: integer;
Rect: TRect; State: TOwnerDrawState);
var
R: TRect;
begin
with ListBox1.Canvas do
begin
// 背景色
if State * [odSelected, odFocused] <> [] then
Brush.Color := clRed
else
Brush.Color := ListBox1.Color;
FillRect(Rect);
// 文字
if State * [odSelected, odFocused] <> [] then
Brush.Color := clHighlightText
else
Brush.Color := ListBox1.Font.Color;
R := Rect;
InflateRect(R, -4, 0);
SetBkMode(Handle, TRANSPARENT);
DrawText(Handle, ListBox1.Items[Index], -1, R, DT_SINGLELINE or DT_VCENTER);
// 如果有焦点,则再绘制一次焦点框,达到擦除的目的
if odFocused in State then
DrawFocusRect(Rect);
end;
end;

或者,

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin //字体用原来默认的颜色
if Odd(index) then //当items的index为奇数时的颜色
begin
listbox1.Canvas.Brush.Color:=clwindow;
ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);
end
else //当items的index为偶数时的颜色
begin
listbox1.Canvas.Brush.Color:=clinactivecaptiontext;
ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);
end;
if odSelected in state then //当选定时的颜色
begin
listbox1.Canvas.Brush.Color:=clhighlight;
ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);
end;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: