Firemonkey-对象检测:Delphi 10.3.3安卓应用如何识别点击的矩形控件?
在Delphi 10.3.3 Android应用中识别点击矩形对象的最佳方法
嘿,我来分享几个实用方案,都是在Delphi Android开发里验证过的,你可以根据需求选最适合的:
方案一:共用OnClick事件(最简便高效)
这是最常用的方法,适合大多数场景。给所有矩形控件绑定同一个点击事件处理函数,通过Sender参数就能直接识别被点击的对象:
- 在表单上选中所有TRectangle控件
- 在Object Inspector的Events标签里,找到
OnClick事件,选择同一个处理函数(比如RectangleClick) - 实现事件函数:
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
相关产品推荐
相关产品推荐

