5

我有TListView一些显示工具提示的专业领域。因为我无法通过设计在 a 上定义特定区域TListView以显示每个Subitem.

所以我创建了一个结构,其中包含它们的位置以及工具提示(提示)。这部分工作正常。然而,这些位置是相TListView对于它的顶部的,所以一旦用户滚动,MousePos仍然指的是完全可见的TListView,无论TListView滚动到哪里。

那讲得通; 但我希望将用户向下滚动的距离添加到 Y 坐标中。(我也想对 X 坐标做同样的事情,但这不太相关。)但据我所知,A)aTListView上没有检测到这一点的机制,B)大多数指南谈论TListView和滚动是指在发生滚动时捕获滚动,而不是在我的情况下,在不同的事件期间(在这种情况下,在鼠标移动时)。

那么我将如何检测或计算用户在没有滚动事件时滚动了多远?

4

1 回答 1

6

有一个机制:ListView.ViewOrigin

读取 ViewOrigin 以确定列表图像的逻辑原点。当列表视图不滚动时,ViewOrigin 为 (0,0)。否则,使用 x 坐标确定视图水平滚动的像素数,使用 y 坐标确定视图垂直滚动的像素数。

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


这应该仅在您的列表视图处于vsIconvsSmallIcon视图样式时才有效。(您似乎没有提到您使用的视图样式)。尽管如此,在这里进行一个简单的测试,看起来它也适用于vsReport风格。TScrollInfoViewOrigin.Y 给出了与调用检索的“nPos”完全相同的值GetScrollInfo

于 2013-08-21T12:35:32.237 回答