检测单击/按下ListViewItem的位置

时间:2016-08-23 11:18:27

标签: android delphi firemonkey delphi-xe8

在使用Firemonkey TListView的Delphi XE8中。

我有一个ListView,里面有大约5个项目。每个项目都有一个图像。

如何检测何时单击/按下图像?

我一直在看这个程序:

OnItemClickEx

但我不明白如何使用它。我不确定这是否是我需要使用的。

任何帮助都会很棒。

谢谢,

6 个答案:

答案 0 :(得分:1)

ListView1ItemClickEx事件上的

添加

 if ItemObject is TListItemImage then
    ShowMessage('Image Pressed!)

答案 1 :(得分:0)

您已经在查看正确的程序。你必须在那里检查参数ItemObject的类:

if (ItemObject<>nil) and (ItemObject.InheritsFrom(TListItemImage)) then
    //...

这是适用于RAD Studio 10.1 Berlin的最小示例:

创建一个新的多设备应用程序并在主窗体上放置TlistView。 添加以下事件处理程序:

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.ItemAppearance.ItemAppearance := 'ImageListItemBottomDetail';
  ListView1.Items.Add;
end;

procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex:  Integer;
  const LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
begin
  if (ItemObject<>nil) and (ItemObject.InheritsFrom(TListItemImage)) then
    ShowMessage('image clicked');
end;

答案 2 :(得分:0)

设置Listview项目图像对象属性....

procedure TForm1.OnFormCreate(Sender:TObject)
begin
  ListView1.ItemAppearanceObjects.ItemObjects.Image.Align :=  TListItemAlign.Leading;
  ListView1.ItemAppearanceObjects.ItemObjects.Image.VertAlign := TListItemAlign.Center;
  ListView1.ItemAppearanceObjects.ItemObjects.Image.PlaceOffset.X := 370;
end;

然后在ItemClickEx过程中,我执行了以下操作:

procedure TForm1.ListView1ItemClickEx(const Sender: TObject;
ItemIndex: Integer; const LocalClickPos: TPointF;
const ItemObject: TListItemObject);
begin
 if (LocalClickPos.X > ListView1.ItemAppearanceObjects.ItemObjects.Image.PlaceOffset.X) and
 (LocalClickPos.X < (ListView1.ItemAppearanceObjects.ItemObjects.Image.PlaceOffset.X + ListView1.ItemAppearanceObjects.ItemObjects.Image.Width)) and
 (LocalClickPos.Y > ListView1.ItemAppearanceObjects.ItemObjects.Image.PlaceOffset.Y) and
 (LocalClickPos.Y < (ListView1.ItemAppearanceObjects.ItemObjects.Image.PlaceOffset.Y + ListView1.ItemAppearanceObjects.ItemObjects.Image.Height)) then
  begin
    ShowMessage('Image Pressed!;)
  end;
end;

答案 3 :(得分:0)

procedure TfmReference.ListView1UpdateObjects(const Sender: TObject;
 const AItem: TListViewItem);
begin
 AItem.Objects.FindObjectT<TListItemImage>('Image4').Bitmap := ImageList1.Source.Items[0].MultiResBitmap[0].Bitmap;
end;

答案 4 :(得分:0)

procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex:  Integer;
  const LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
begin
ShowMessage('clicked: ' + ItemObject.Name); 
// ItemObject.Name is the name of the oject that is clicked in the ListView row.

//If just looking for type of object:
if ItemObject is TListItemAccessory then ShowMessage('Acessory clicked');

if ItemObject is TListItemImage then ShowMessage('Image clicked: ' + ItemObject.Name);

if ItemObject is TListItemText then ShowMessage('text clicked');
end;

答案 5 :(得分:0)

procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: Integer;
   const LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
begin
if TListView(sender).Selected <> nil then
begin
    if ItemObject is TListItemImage then
    begin
      if TListItemImage(ItemObject).Name = 'Image3' then
        begin
          TabControl1.ActiveTab := TabItem2;
        end;
     end;
 end;