2

我在 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 绘制的。如果我的代码有问题,请告诉我如何解决它。如果这是一个错误,也许有人知道解决方法。谢谢你。

4

1 回答 1

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;
于 2011-10-08T12:00:22.580 回答