Как изменить цвет текста в столбце в TTNTListView? - PullRequest
2 голосов
/ 08 октября 2011

Я использую TTNTListView в Delphi 7. Он установлен в 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 Ответ

1 голос
/ 08 октября 2011

Я предполагаю, что вам просто нужно явно установить цвет для других случаев.Поскольку вы этого не делаете, состояние холста сохраняется.Попробуйте это:

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;
...