You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firemonkey-对象检测:Delphi 10.3.3安卓应用如何识别点击的矩形控件?

在Delphi 10.3.3 Android应用中识别点击矩形对象的最佳方法

嘿,我来分享几个实用方案,都是在Delphi Android开发里验证过的,你可以根据需求选最适合的:

方案一:共用OnClick事件(最简便高效)

这是最常用的方法,适合大多数场景。给所有矩形控件绑定同一个点击事件处理函数,通过Sender参数就能直接识别被点击的对象:

  1. 在表单上选中所有TRectangle控件
  2. 在Object Inspector的Events标签里,找到OnClick事件,选择同一个处理函数(比如RectangleClick)
  3. 实现事件函数:
procedure TForm1.RectangleClick(Sender: TObject);
begin
  // 先判断Sender是否为TRectangle类型
  if Sender is TRectangle then
  begin
    // 强制转换后就能获取名称和其他属性
    ShowMessage('你点击了矩形:' + TRectangle(Sender).Name);
    // 这里还可以根据名称执行不同逻辑,比如:
    // if TRectangle(Sender).Name = 'RectBtn1' then DoSomething1;
  end;
end;

这个方法代码量少,维护简单,完全满足基础的点击识别需求。

方案二:通过Form的Touch事件实现精细化识别

如果需要区分点击、长按、滑动等复杂触摸操作,可以在Form的OnTouch事件里遍历控件,判断触摸点是否落在矩形范围内:

procedure TForm1.FormTouch(Sender: TObject; const Touches: TTouches; const Action: TTouchAction);
var
  TouchPoint: TPointF;
  TargetRect: TRectF;
  Comp: TComponent;
begin
  // 只处理触摸抬起的动作,避免重复触发
  if Action <> TTouchAction.Up then Exit;

  TouchPoint := Touches[0].Position;
  
  // 遍历表单上的所有组件
  for Comp in Self.Components do
  begin
    if Comp is TRectangle then
    begin
      // 把矩形的本地坐标转换为屏幕坐标,和触摸点匹配
      TargetRect := TRectangle(Comp).Parent.ClientToScreen(TRectangle(Comp).BoundsRect);
      
      if TargetRect.Contains(TouchPoint) then
      begin
        ShowMessage('点击了矩形:' + TRectangle(Comp).Name);
        Break; // 找到目标后退出循环
      end;
    end;
  end;
end;

注意:如果矩形在容器控件(比如TPanel)里,要确保坐标转换的正确性,避免判断出错。

方案三:自定义矩形组件(适合扩展需求)

如果你的矩形需要附加更多自定义逻辑(比如专属的点击回调、状态标记),可以创建一个继承自TRectangle的自定义组件:

type
  TMyRectangle = class(TRectangle)
  private
    FOnCustomClick: TNotifyEvent;
  protected
    procedure Click; override;
  public
    property OnCustomClick: TNotifyEvent read FOnCustomClick write FOnCustomClick;
  end;

procedure TMyRectangle.Click;
begin
  inherited;
  if Assigned(FOnCustomClick) then
    FOnCustomClick(Self);
end;

然后在表单上使用这个自定义矩形,每个控件可以绑定独立的自定义点击事件,或者在共用事件里识别组件类型,这样扩展性更强。


总结一下:如果只是简单的点击识别,方案一是最优选择;需要复杂触摸处理选方案二;有特殊扩展需求再考虑方案三。

内容的提问来源于stack exchange,提问作者Olaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:32:52