2014-12-02 84 views
0

在VCL我们可以用这个(要获得一个列表项):Firemonkey的ListView onmousedown事件事件

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; 

但随着Firemonkey ListView中我没有看到任何话getItemAt功能。

所以,请我们怎样才能使用onmousedown事件ListView控件(在firemonkey)的事件列表项。

非常感谢。

+0

您可以使用'Selected'属性。 – 2014-12-02 14:11:08

+0

'ObjectAtPoint'也许? – TLama 2014-12-02 14:12:28

+0

我想要使用它来使用OnMouseDown事件即可选择一个项目。 – randydom 2014-12-02 14:19:02

回答

1

没有现成的解决方案来找到与OnMouseDown项目。我建议你使用OnItemClick代替:

procedure TForm1.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem); 

它给你的项目

+0

我知道这个事件,所有我想要的是能够通过右键点击选择一个项目:'if Button = TMouseButton.mbRight'。 谢谢。 – randydom 2014-12-02 21:16:54

0

正如汤姆说一个参考,没有现成的解决方案。但是,如果你可以用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; 
0

我找到分辩点击TListViewItem通过搜索如果鼠标的当前位置是该项目RECT内。

我只用y方法,因为我所有的itmes只有文本,但您可以通过使用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;