2015-01-15 78 views
-2

有人问我: 如何获取滚动条的每个组件的滚动偏移量以及如何获取某些项目的坐标(可能TListBoxitem在组件的可见部分) - 用于显示当前项目的TPopup的示例?如何获得具有滚动条的每个组件的滚动偏移量?

Popup.Position.X:= ListBox.ItemByIndex(0).Position.X; 
Popup.Position.Y:= ListBox.ItemByIndex(0).Position.Y; 

此代码显示Item(0)左上角的TPopup并且可见。

当可见项(100)TPopup是不是在左上角和不可见:

Popup.Position.X:= ListBox.ItemByIndex(100).Position.X; 
Popup.Position.Y:= ListBox.ItemByIndex(100).Position.Y; 

如何使TPopup可见每个项目的左上角?

+1

我不知道什么实际意思由此,即使有答案。你能编辑你的问题来阐述你的意思吗? – 2015-01-15 21:36:15

+1

你应该邀请这些人在Stack Overflow上发布他们的问题,而不是让他们成为他们的中间人。你不能回答澄清问题,因为这不是你的问题。 – 2015-01-15 22:34:14

+1

如果列表项大于TListBox的高度以及当前TListBoxitem的后续显示示例TPopup,则可以使用示例来确定TListBox在TListBox(在可见屏幕上)中的位置。 – pudnivec74 2015-01-16 06:51:22

回答

1

答案是非常简单的(例如,对于一个TListBox):

var 
    offsetX, offsetY: single; 
begin 
    offsetX:= myListBox.ViewportPosition.X; 
    offsetY:= myListBox.ViewportPosition.Y; 
end; 

以及如何做出左上角可见TPopup每个项目:

Popup.Position.X:= ListBox.ItemById(0).Position.X - ListBox.ViewportPosition.X; 
Popup.Position.Y:= listBox.ItemById(0).Position.Y - ListBox.ViewportPosition.Y; 
. 
. 
. 
Popup.Position.X:= ListBox.ItemById(100).Position.X - ListBox.ViewportPosition.X; 
Popup.Position.Y:= listBox.ItemById(100).Position.Y - ListBox.ViewportPosition.Y;