如何计算用户在TListView中滚动的距离,但在用户滚动时却没有?

时间:2013-08-21 11:48:13

标签: delphi

我有一个TListView,其中包含一些显示工具提示的专门区域。因为我无法通过设计在TListView上定义特定区域,以显示每Subitem以上的工具提示。

所以我创建了一个结构,其中包含它们的位置以及工具提示(提示)。这部分工作正常。但是,这些位置相对于TListView位于其顶部,因此一旦用户滚动,MousePos仍然引用TListView的完整可见,无论TListView在何处{{} 1}}滚动到。

这是有道理的;但是我想在Y坐标中添加用户向下滚动的距离。 (我也喜欢对X坐标做同样的事情,但那不太相关。)但据我所知,A)TListView没有机制来检测这个和B大多数谈论TListView和滚动的指南都指的是捕捉正在发生的滚动 ,而不是在我的情况下,在不同的事件中(在这种情况下,在鼠标移动时)。

那么,如果不在滚动事件中,我如何检测或计算用户滚动的距离?

1 个答案:

答案 0 :(得分:6)

有一种机制:ListView.ViewOrigin

  

读取ViewOrigin以确定列表图像的逻辑原点。   如果未滚动列表视图,则ViewOrigin为(0,0)。除此以外,   使用x坐标确定视图的像素数   水平滚动,y坐标确定数量   像素视图垂直滚动。

var
  Pt: TPoint;
begin
  Pt := ListView1.ViewOrigin;


这仅适用于您的列表视图处于vsIconvsSmallIcon视图样式的情况。 (您似乎没有提到您正在使用的视图样式)。尽管如此,通过这里的简单测试,看起来它也适用于vsReport风格。 ViewOrigin.Y提供与TScrollInfo调用检索到的GetScrollInfo'nPos'完全相同的值。