title: Hot track doesn't work in a virtual TListView while dragging
body: <p>If I take a virtual <code>TListView</code> and try to drag items (<code>Accept:= True</code> always) the "hot tracking" system looks corrupted. In win 7 the hot item remains near the selected item, while in win 8.1 it remains fixed at random positions. 
  I recorded this behavior to better understand what I mean:</p>
  
  <p><a href="https://www.youtube.com/watch?v=e5eKWlqx_pA" rel="nofollow noreferrer">Here is the recording from win 7</a></p>
  
  <p><a href="https://www.youtube.com/watch?v=_dl7-ryxexs" rel="nofollow noreferrer">Here is the recording from win 8.1</a></p>
  
  <p>And this is the minimal code to reproduce the problem:</p>
  
  <p><strong>.dfm</strong></p>
  
  <pre><code>object Form1: TForm1
    Left = 0
    Top = 0
    Caption = 'Form1'
    ClientHeight = 378
    ClientWidth = 398
    Color = clBtnFace
    DoubleBuffered = True
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    OldCreateOrder = False
    Position = poScreenCenter
    OnCreate = FormCreate
    PixelsPerInch = 96
    TextHeight = 13
    object ListView1: TListView
      Left = 78
      Top = 40
      Width = 221
      Height = 286
      Columns = &lt;
        item
          Width = 130
        end&gt;
      DragMode = dmAutomatic
      MultiSelect = True
      OwnerData = True
      ReadOnly = True
      RowSelect = True
      TabOrder = 0
      ViewStyle = vsReport
      OnData = ListView1Data
      OnDragOver = ListView1DragOver
    end
  end
  </code></pre>
  
  <p><strong>.pas</strong></p>
  
  <pre><code>unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ComCtrls;
  
  type
    TForm1 = class(TForm)
      ListView1: TListView;
      procedure ListView1Data(Sender: TObject; Item: TListItem);
      procedure FormCreate(Sender: TObject);
      procedure ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
        State: TDragState; var Accept: Boolean);
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.dfm}
  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
   ListView1.Items.Count:= 10;
  end;
  
  procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
  begin
   Item.Caption:= 'Item '+IntToStr(Item.Index);
  end;
  
  procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
    State: TDragState; var Accept: Boolean);
  begin
   Accept:= True;
  end;
  
  end.
  </code></pre>
  
  <p>Of course, the question is, if anything can be done to correct this behavior ?</p>
  
  <p><strong>Edit:</strong></p>
  
  <p>I tried to implement my own tracking system, and it seems it's working but with a little exception: the uppermost item under the cursor remains always selected...</p>
  
  <pre><code>function TListView.GetItemIndexAt(X, Y: Integer): Integer;
  var Info: TLVHitTestInfo;
  begin
   Result:= -1;
   if HandleAllocated then begin
    Info.pt:= Point(X, Y);
    Result:= ListView_HitTest(Handle, Info);
   end;
  end;
  
  procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
    State: TDragState; var Accept: Boolean);
  var Src, Dest, I: Integer;
  begin
   Accept:= True;
   Src:= ListView1.Selected.Index;
   Dest:= ListView1.GetItemIndexAt(X, Y);
   for I:= 0 to ListView1.Items.Count-1 do
    if (I = Src) or (I = Dest) then ListView1.Items[I].Selected:= True
     else ListView1.Items[I].Selected:= False;
  end;
  </code></pre>