Почему раскрашивается только текст, а не вся подпись TListView?

Извините, не могу прокомментировать как отключить горячее отслеживание в Delphi ListView?, я начинаю новый вопрос.

Следуя совету по ссылке выше, но когда я нажимаю на текст заголовка, список выглядит следующим образом:

введите здесь описание изображения

Я установил brush.color в drawItem и drawSubItem каждой строки:

Sender.Canvas.Brush.Color := mycolor

Но если я нажму на текст подписи, то в области подписи только текстовая часть будет иметь цветной фон.

Код: (Рабочая среда: XE6, Win8.1)

TMyTaskListView = class(TListView)
protected
  procedure CreateWnd; override;
end;

procedure TMyTaskListView.CreateWnd;
begin
  inherited;
  SetWindowTheme(WindowHandle, nil, nil);
end;

var
ListView1: TMyTaskListView;

Form.createForm:

ListView1.Columns.Add.Caption := 'TaskNo';
ListView1.Columns.Add.Caption := 'Task1';
ListView1.Columns.Add.Caption := 'Task2';
ListView1.Columns.Add.Caption := 'Task3';
ListView1.Columns.Add.Caption := 'Task Status';
ListView1.Items.Count := 5;

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
    Item.Caption := IntToStr(Item.Index);
    Item.SubItems.Add('done');
    Item.SubItems.Add('error'); 
    Item.SubItems.Add('error');
    Item.SubItems.Add('error');
end;

 procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
   Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
 begin

   if lstTaskItemCurClickBackgroundIndex = Item.Index then
         Sender.Canvas.Brush.Color := $cc;
 end;

 procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
   var DefaultDraw: Boolean);
 begin
   if lstTaskItemCurClickBackgroundIndex = Item.Index then
         Sender.Canvas.Brush.Color := $cc;
 end;
procedure TForm1.ListView1Click(Sender: TObject);
var
  ARect: TRect;
  Idx: Integer;
  SubItemIndex: Integer;
  pt: TPoint;
  item : TLIstItem;
  hittestinfo: TLVHitTestInfo;
  Rect: TRect;
begin
  Idx := -1;
  pt:= ListView1.ScreenToClient( mouse.cursorpos );
  item := ListView1.GetItemAt( pt.x, pt.y );
  If assigned( item ) then
    Idx := item.Index
  else
  begin
    FillChar( hittestinfo, sizeof( hittestinfo ), 0 );
    hittestinfo.pt := pt;
    If -1 <>ListView1.perform( LVM_SUBITEMHITTEST, 0, lparam(@hittestinfo))
    Then
    Begin
      Idx := hittestinfo.iItem;
      SubItemIndex := hittestinfo.iSubItem;
    End
    Else
      if (ListView1.Items.Count > 0) then
        Idx := 0;
  end;

  if Idx >= 0 then
  begin
    Rect  := ListView1.Items[Idx].DisplayRect(drBounds);

    if lstTaskItemPrevClickBackgroudColorRect <> Rect then
    begin
      InvalidateRect(ListView1.Handle, lstTaskItemPrevClickBackgroudColorRect, True);
      InvalidateRect(ListView1.Handle, Rect, True);
    end;
    lstTaskItemPrevClickBackgroudColorRect := Rect;
    lstTaskItemCurClickBackgroundIndex := Idx;
  end;
end;

person coo    schedule 28.10.2014    source источник
comment
Если вы не опубликуете свой код, мы не сможем его отладить. Если вам нужна помощь в выяснении, почему ваш код не работает, опубликуйте свой код, чтобы мы могли попытаться ответить.   -  person Ken White    schedule 28.10.2014
comment
Я разместил код. Я думаю, возможно, есть специальное сообщение, которое обрабатывается, когда я нажимаю на текст подписи. Но как это оградить?   -  person coo    schedule 28.10.2014
comment
Почему вы аннулируете прямоугольники вручную? Попробуйте вместо этого использовать TListView.UpdateItems(). Это аннулирует предметы для вас. Или, что еще лучше, даже не аннулируйте элементы вручную. Щелчок по элементу автоматически запускает перерисовку.   -  person Remy Lebeau    schedule 28.10.2014
comment
Было бы очень легко сделать mcve   -  person David Heffernan    schedule 28.10.2014
comment
@Remy Я изменил InvalidateRect на TListView.UpdateItems(), но результат тот же. Когда я нажимаю на другое место, кроме текста заголовка, вся строка имеет красный фон; но когда я нажимаю на текст подписи, только этот текст имеет красный фон.   -  person coo    schedule 29.10.2014
comment
@coo: извините, но я не могу воспроизвести проблему в XE2, используя показанный вами код. Вся ячейка окрашена, как и ожидалось.   -  person Remy Lebeau    schedule 29.10.2014
comment
@Remy Моя среда - XE6. Я создаю exe в Win8.1. И когда переношу ехе на ХР проблема тоже есть.   -  person coo    schedule 29.10.2014
comment
Я не знаю, ясно ли я сказал, я имел в виду щелкнуть текст заголовка, то есть текст первой ячейки каждой строки, а не другое место строки.   -  person coo    schedule 29.10.2014
comment
@coo: Моя среда - XE6, это важная информация, которую нужно было предоставить заранее.   -  person Remy Lebeau    schedule 29.10.2014