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