获取TListView中所选行的屏幕坐标

时间:2011-10-31 15:19:58

标签: delphi listview

我在ViewStyle vsReport中显示了TListView(实际上是自定义后代)。选择一行。我想获得该行的屏幕坐标(或该行中的单元格)。我有什么方法可以做到这一点吗?

(我的目标是在列表视图上显示一个小表单,从而产生从所选行中删除的效果。)

我正在将Delphi 2010用于此特定应用程序。

2 个答案:

答案 0 :(得分:3)

对于vsReport样式的列表视图,我认为最好的方法是使用LVM_GETITEMRECTLVM_GETSUBITEMRECT消息。

VCL没有为您提供此功能,但从MSDN文档中解决它不应该太难。

虽然使用VCL公开的TListItem.Position属性非常简单,但据我所知,这并不能帮助您获得行高或实际上子项的坐标。

<强>更新

正如NGLN非常有用地指出的那样,CommCtrl单元确实公开了ListView_GetItemRectListView_GetSubItemRect,它们比上面提供的等效Windows消息更方便使用。

答案 1 :(得分:0)

var
  sel: TListItem;
  pnt: TPoint;
begin
  sel := ListView1.Selected;
  if not Assigned(sel) then Exit;
  pnt := ListView1.ClientToScreen(Sel.Position);