检测 ListViewItem 的位置 clicked/pressed
Detect where ListViewItem has been clicked/pressed
在 Delphi XE8 中使用 Firemonkey TListView。
我有一个 ListView,其中包含大约 5 个项目。每个项目中都有一个图像。
如何检测图像何时为 clicked/pressed?
我一直在看程序:
OnItemClickEx
但是我不明白怎么用。不确定这是否是我需要使用的。
任何帮助都会很棒。
谢谢,
您正在寻找正确的程序。您必须在那里检查参数 ItemObject
的 class:
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;
设置 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;
procedure TfmReference.ListView1UpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
begin
AItem.Objects.FindObjectT<TListItemImage>('Image4').Bitmap := ImageList1.Source.Items[0].MultiResBitmap[0].Bitmap;
end;
在 ListView1ItemClickEx 事件上添加
if ItemObject is TListItemImage then
ShowMessage('Image Pressed!)
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;
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;
在 Delphi XE8 中使用 Firemonkey TListView。
我有一个 ListView,其中包含大约 5 个项目。每个项目中都有一个图像。
如何检测图像何时为 clicked/pressed?
我一直在看程序:
OnItemClickEx
但是我不明白怎么用。不确定这是否是我需要使用的。
任何帮助都会很棒。
谢谢,
您正在寻找正确的程序。您必须在那里检查参数 ItemObject
的 class:
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;
设置 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;
procedure TfmReference.ListView1UpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
begin
AItem.Objects.FindObjectT<TListItemImage>('Image4').Bitmap := ImageList1.Source.Items[0].MultiResBitmap[0].Bitmap;
end;
在 ListView1ItemClickEx 事件上添加
if ItemObject is TListItemImage then
ShowMessage('Image Pressed!)
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;
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;