2011-10-31 70 views
1

我在ViewStyle vsReport中顯示了一個TListView(實際上是一個自定義後代)顯示。一行被選中。我想獲得該行(或該行內的單元格)的屏幕座標。有什麼辦法可以做到這一點?在TListView中獲取所選行的屏幕座標

(我的目標是在列表視圖上顯示一個小表格,以顯示從選定行中刪除的效果)。

我對這個特定的應用程序使用Delphi 2010。

回答

3

對於vsReport風格的列表我認爲最好的辦法是使用LVM_GETITEMRECTLVM_GETSUBITEMRECT消息。

VCL並沒有爲你包裝這個功能,但從MSDN文檔解決它不應該太困難。

儘管使用由VCL公開的TListItem.Position屬性非常簡單,但據我所知,這並不能幫助您獲得行高或子項的座標。

更新

由於NGLN非常有益指出,CommCtrl單元不暴露ListView_GetItemRectListView_GetSubItemRect它比上面相應的Windows消息,使用更方便。

+1

+1還有'ListView_GetSubItemRect'函數。 – NGLN

+0

使用'CommCtrl.pas'。 – NGLN

+1

@Larry有關其使用的示例:請參閱[在ListView中繪製自己的進度條](http://stackoverflow.com/questions/7044125/delphi-draw-own-progress-bar-in-list-view/7048062# 7048062)。 – NGLN

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

謝謝!剩下的問題 - 如何獲得行的高度? –