比如有一列内容是111,333怎么让111和333是不同颜色。listview 同一列 不同颜色

解决方案 »

  1.   

    你是想各个subitem不同样色,
    还是只有数值不同才不同样色,如果有100个不同的数值那不就要100种颜色?
      

  2.   

    我的意思是同一列显示不同的颜色。
    比如有一列的内容是111,222这个字串。但我想让111显示红色,222显示绿但。它们是在同一个subitem里的。
      

  3.   


    在这个事件里边根据你的要求写代码比如:
    var
      i: Integer;
    begin
      i:= (Sender as TListView).Items.IndexOf(Item);
      if Odd(i) then    //颜色交替变化
        Sender.Canvas.Brush.Color:= clInfoBK
      else
        Sender.Canvas.Brush.Color:= $02F0EED7;
      Sender.Canvas.FillRect(Item.DisplayRect(drIcon));
    end;
      

  4.   

    解决了。
    var
      BoundRect, Rect: TRect;
      i: integer;
      TextFormat: Word;
      LV: TListView;
    begin
      DefaultDraw := False; // 不让系统画了
      LV := lv1;
      BoundRect := Item.DisplayRect(drBounds);
      DefaultDraw := False; // 不让系统画了  for i := 0 to Item.SubItems.Count - 1 do
      begin
        ListView_GetSubItemRect(LV.Handle, Item.Index, i, LVIR_LABEL, @Rect);
    //    lv1.Canvas.Font.Color := clBlue;
        SetTextColor(LV.Canvas.Handle, clBlue);
        DrawText(LV.Canvas.Handle, PCHAR(Item.SubItems[i]),
          Length(Item.SubItems[i]), Rect, DT_VCENTER or DT_SINGLELINE or
          DT_END_ELLIPSIS or TextFormat);
        ListView_GetSubItemRect(LV.Handle, Item.Index, i, LVIR_LABEL, @Rect);    ListView_GetSubItemRect(LV.Handle, Item.Index, i, LVIR_LABEL, @Rect);
    //    lv1.Canvas.Font.Color := clRed;
        SetTextColor(LV.Canvas.Handle, clRed);
        Rect.Left := Rect.Left + 70;
        DrawText(LV.Canvas.Handle, PCHAR(Item.SubItems[i]),
          Length(Item.SubItems[i]), Rect, DT_VCENTER or DT_SINGLELINE or
          DT_END_ELLIPSIS or TextFormat);
      end;
    end;
    重点在于SetTextColor(LV.Canvas.Handle, clRed);
    用lv1.Canvas.Font.Color := clRed;设置第二次的时候就没有效果。