我在ViewStyle vsReport
中顯示了一個TListView(實際上是一個自定義後代)顯示。一行被選中。我想獲得該行(或該行內的單元格)的屏幕座標。有什麼辦法可以做到這一點?在TListView中獲取所選行的屏幕座標
(我的目標是在列表視圖上顯示一個小表格,以顯示從選定行中刪除的效果)。
我對這個特定的應用程序使用Delphi 2010。
我在ViewStyle vsReport
中顯示了一個TListView(實際上是一個自定義後代)顯示。一行被選中。我想獲得該行(或該行內的單元格)的屏幕座標。有什麼辦法可以做到這一點?在TListView中獲取所選行的屏幕座標
(我的目標是在列表視圖上顯示一個小表格,以顯示從選定行中刪除的效果)。
我對這個特定的應用程序使用Delphi 2010。
對於vsReport
風格的列表我認爲最好的辦法是使用LVM_GETITEMRECT
和LVM_GETSUBITEMRECT
消息。
VCL並沒有爲你包裝這個功能,但從MSDN文檔解決它不應該太困難。
儘管使用由VCL公開的TListItem.Position
屬性非常簡單,但據我所知,這並不能幫助您獲得行高或子項的座標。
更新
由於NGLN非常有益指出,CommCtrl單元不暴露ListView_GetItemRect
和ListView_GetSubItemRect
它比上面相應的Windows消息,使用更方便。
var
sel: TListItem;
pnt: TPoint;
begin
sel := ListView1.Selected;
if not Assigned(sel) then Exit;
pnt := ListView1.ClientToScreen(Sel.Position);
謝謝!剩下的問題 - 如何獲得行的高度? –
+1還有'ListView_GetSubItemRect'函數。 – NGLN
使用'CommCtrl.pas'。 – NGLN
@Larry有關其使用的示例:請參閱[在ListView中繪製自己的進度條](http://stackoverflow.com/questions/7044125/delphi-draw-own-progress-bar-in-list-view/7048062# 7048062)。 – NGLN