我在ViewStyle vsReport
中显示了TListView(实际上是自定义后代)。选择一行。我想获得该行的屏幕坐标(或该行中的单元格)。我有什么方法可以做到这一点吗?
(我的目标是在列表视图上显示一个小表单,从而产生从所选行中删除的效果。)
我正在将Delphi 2010用于此特定应用程序。
答案 0 :(得分:3)
对于vsReport
样式的列表视图,我认为最好的方法是使用LVM_GETITEMRECT
和LVM_GETSUBITEMRECT
消息。
VCL没有为您提供此功能,但从MSDN文档中解决它不应该太难。
虽然使用VCL公开的TListItem.Position
属性非常简单,但据我所知,这并不能帮助您获得行高或实际上子项的坐标。
<强>更新强>
正如NGLN非常有用地指出的那样,CommCtrl单元确实公开了ListView_GetItemRect
和ListView_GetSubItemRect
,它们比上面提供的等效Windows消息更方便使用。
答案 1 :(得分:0)
var
sel: TListItem;
pnt: TPoint;
begin
sel := ListView1.Selected;
if not Assigned(sel) then Exit;
pnt := ListView1.ClientToScreen(Sel.Position);