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

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;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值