在这个事件里边根据你的要求写代码比如: 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;
解决了。 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;设置第二次的时候就没有效果。
还是只有数值不同才不同样色,如果有100个不同的数值那不就要100种颜色?
比如有一列的内容是111,222这个字串。但我想让111显示红色,222显示绿但。它们是在同一个subitem里的。
在这个事件里边根据你的要求写代码比如:
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;
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;设置第二次的时候就没有效果。