在VCL中,我们可以使用这个(来获得一个ListItem ):
TForm.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
li: TListItem;
lv : TListView;
begin
lv := TListView(Sender);
li := lv.GetItemAt(X, Y); // we get our ListItem
end;但在火猴ListView中,我看不到任何GetItemAt函数。
所以请告诉我们如何通过使用ListView的OnMouseDown事件来获得一个ListItem (在火猴中)。
非常感谢。
发布于 2014-12-03 01:12:12
使用OnMouseDown没有现成的解决方案来查找项目。我建议你改用OnItemClick:
procedure TForm1.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);,它为您提供对该项的引用。
发布于 2015-11-18 21:17:18
正如Tom所说,没有现成的解决方案。但是如果你能忍受FMX源码的改变,你可以把它插入到FMX.ListView中
function TListViewBase.GetItemAt(P: TPointF):TListItem;
var
ItemAt: Integer;
begin
ItemAt := FindItemAbsoluteAt(Round(FScrollViewPos + P.Y - (LocalRect.Top + FSideSpace)));
if (ItemAt >= 0) and (ItemAt < Adapter.Count) then
Result := Adapter[ItemAt]
else
Result := nil
end;发布于 2015-12-27 05:31:33
通过搜索鼠标的当前位置是否在项目rect内,我可以找到右击时的TListViewItem。
我只使用Y,因为我所有的项目都只是文本,但您也可以使用X值来扩展复杂性。
在这个例子中,我用鼠标右键设置了选中的项目。
procedure TForm2.lwPlayListMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
var
I: Integer;
rct: TRectF;
begin
if ssRight in Shift then
for I := 0 to lwPlayList.Items.Count-1 do
Begin
rct := lwPlayList.GetItemRect(I);
if ( rct.Bottom >= Y) and (Y >= rct.Top ) then
Begin
lwPlayList.ItemIndex := I;
lwPlayList.Selected := lwPlayList.Items[I];
End;
End;
end;https://stackoverflow.com/questions/27251201
复制相似问题