Delphi 获取单击的对象的名称

Delphi 获取单击的对象的名称,delphi,firemonkey,Delphi,Firemonkey,我在运行时在viewport3D中制作了一堆Tcube。我想知道是否点击了一个。如果是,则返回此TCube的名称 我所说的一个小例子 procedure blockClicked; begin //get name of block //checkMode ( add , delete, other) //get name of block x, y, and z //do other stuff end; 如果只为所有这些TCube对象分配一个公共事件,并通过键入Sender

我在运行时在viewport3D中制作了一堆Tcube。我想知道是否点击了一个。如果是,则返回此TCube的名称

我所说的一个小例子

procedure blockClicked;
begin
  //get name of block
  //checkMode ( add , delete, other)
  //get name of block x, y, and z
  //do other stuff
end;

如果只为所有这些
TCube
对象分配一个公共事件,并通过键入
Sender
参数(如
TCube(Sender)…
)来访问单击的对象,怎么样?@TLama听起来会起作用。。但是有一个基本的设置如何?我添加了一个答案,这看起来对吗?我只是在猜测?我不知道您是如何创建对象的,但基本上您需要创建一个与事件方法原型匹配的私有方法。在这种情况下,发送到
TNotifyEvent
。在代码中,这可能看起来像(根据您之前关于数组的问题)。在VCL应用程序中也会这样做。您想要名称,不是吗?因此,代码中仍然缺少该属性。尝试使用
(发送方为TCube)。在某处命名
。是的,这是正确的。无论如何,如果您确信
cubelick
方法将始终仅分配给
TCube
对象,则可以使用直接类型转换方式
Cube:=TCube(发送方)
as
操作符(
Sender as TCube
)更安全,因为它尝试将对象类型转换为所需类型,如果不可能,它会引发一个异常,而对于直接类型转换(
TCube(Sender)
),您只希望对象(
Sender
)将属于所需类型(但如果不是那种类型,那就糟糕了)。感谢您尝试一下,看看会发生什么:D@Sherlock70,如果要多次访问该对象,最好将该对象引用存储到局部变量(在由注释get name of block x、y和z表示的问题中)。现在OP可以通过
Cube.Name、Cube.Position.X等方式访问对象属性。@TLama使用
as
cast实际上是一种运行时断言,表明代码是正确的。执行该测试不会花费任何明显的时间,因为UI单击从来都不是CPU瓶颈。在这方面,我总是使用
as
这是一种情景。
procedure TForm1.cubeClick(Sender: TObject);
var
  Cube: TCube;
begin
  // Senders points to the cube clicked
  cube := Sender as Tcube; 
end;