首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firemonkey OnMouseDown事件

Firemonkey OnMouseDown事件
EN

Stack Overflow用户
提问于 2014-12-02 21:57:20
回答 4查看 1.2K关注 0票数 0

在VCL中,我们可以使用这个(来获得一个ListItem ):

代码语言:javascript
复制
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 (在火猴中)。

非常感谢。

EN

回答 4

Stack Overflow用户

发布于 2014-12-03 01:12:12

使用OnMouseDown没有现成的解决方案来查找项目。我建议你改用OnItemClick:

代码语言:javascript
复制
procedure TForm1.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);

,它为您提供对该项的引用。

票数 1
EN

Stack Overflow用户

发布于 2015-11-18 21:17:18

正如Tom所说,没有现成的解决方案。但是如果你能忍受FMX源码的改变,你可以把它插入到FMX.ListView中

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2015-12-27 05:31:33

通过搜索鼠标的当前位置是否在项目rect内,我可以找到右击时的TListViewItem。

我只使用Y,因为我所有的项目都只是文本,但您也可以使用X值来扩展复杂性。

在这个例子中,我用鼠标右键设置了选中的项目。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27251201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档