title: TListview is not correctly painted when OnDrawItem event is used
body: <p>I'm using the OnDrawItem event in the TlistView component to draw the content using custom colors, but when scroll the listview some artifacts appears.</p>
  
  <p><img src="https://i.stack.imgur.com/o4oVx.png" alt="enter image description here"></p>
  
  <p>This is the code used.</p>
  
  <pre><code>procedure TForm35.FormCreate(Sender: TObject);
  var
   i, j : integer;
   Item : TListItem;
   s : string;
  begin
    for i:= 0 to 99 do
    begin
      Item:=ListView1.Items.Add;
      for j:= 0 to ListView1.Columns.Count-1 do
      begin
        s:= Format('Row %d Column %d',[i+1, j+1]);
        if j=0 then
         Item.Caption :=s
        else
         Item.SubItems.Add(s);
      end;
    end;
  end;
  
  procedure TForm35.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
    Rect: TRect; State: TOwnerDrawState);
  var
    x, y, i: integer;
  begin
    if odSelected in State then
    begin
      TListView(Sender).Canvas.Brush.Color := clYellow;
      TListView(Sender).Canvas.Font.Color := clBlack;
    end
    else
    begin
      TListView(Sender).Canvas.Brush.Color := clLtGray;
      TListView(Sender).Canvas.Font.Color := clGreen;
    end;
  
    TListView(Sender).Canvas.FillRect(Rect);
    x := 5;
    y := (Rect.Bottom - Rect.Top - TListView(Sender).Canvas.TextHeight('Hg')) div 2 + Rect.Top;
    TListView(Sender).Canvas.TextOut(x, y, Item.Caption);
    for i := 0 to Item.SubItems.Count - 1 do
    begin
      inc(x, TListView(Sender).Columns[i].Width);
      TListView(Sender).Canvas.TextOut(x, y, Item.SubItems[i]);
    end;
  end;
  </code></pre>
  
  <p>I tested this code in Delphi 2007 and XE3, but I'm getting the same results. How i can prevent this issue?</p>