如何更改TTNTListView中列中的文本颜色?

时间:2011-10-08 11:31:46

标签: delphi tlistview

我在Delphi 7中使用TTNTListView。 它设置为vsReport。 在OnCustomDrawSubItem事件中,我使用以下代码:

procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
   var DefaultDraw: Boolean);
begin
   if SubItem = 2 then
      if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
         Sender.Canvas.Font.Color := clGreen
      else
         Sender.Canvas.Font.Color := clRed;
end;

问题是所有子项> = 3都使用与子项2相同的颜色绘制。我检查过并且对于SubItem> = 3 Sender.Canvas.Font.Color是clBlack但是它们是用clRed和clGreen绘制的。 如果这是我的代码中的问题,请告诉我如何解决它。 如果它是一个错误,也许有人知道一个解决方法。 谢谢。

1 个答案:

答案 0 :(得分:1)

我猜你只需要为其他情况明确设置颜色。由于您没有这样做,画布状态仍然存在。试试这个:

procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
   var DefaultDraw: Boolean);
var
  Color: TColor;
begin
  if SubItem = 2 then
    if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
      Color := clGreen
    else
      Color := clRed;
  else
    Color := clBlack;
  Sender.Canvas.Font.Color := Color;
end;