Virtual Listview とWindows7/Vista

結構前のDelphiMLでの話です。
どうも、この辺りを見るとVista以降でVirutal Listviewを使用するとLVM_GETITEMPOSITIONで返ってくる値が正しくない値になってしまうようです。
なので、TListItemのTopとかLeftの値が使えないんですね。LVM_GETITEMRECTで取得できる値は正しいようなのでこちらを使用するようにするしかないですね。
CommCtrlをusesに追加してListView_GetItemRectを利用して取得しましょう。

var
  rctop: TRECT;
begin
  ListView_GetItemRect(ListView1.Handle, ListView1.TopItem.Index, rcTop, LVIR_BOUNDS);
end;