Сделал так - это швах, но работает
так что сильно не ругайте, лучше таки подскажите как сделать правильнее
TMyFrame = class(TFrame)
....
public
Function GetControl(Control:TCustomScrollBox; SrcPoint:TPointF):TControl;
....
end;
implementation
function TMyFrame.GetControl(Control: TCustomScrollBox; SrcPoint:TPointF): TControl;
var i:Integer;
fm:TFMXObject;
vp,tp:TPointF;
function GetChildControl(Control:TControl):TControl;
var i:Integer;
c:TControl;
Begin
result:=nil;
if Control.ChildrenCount > 0 then begin
for i:=0 to Control.ChildrenCount-1 do
Begin
if (Control.Children[i].Name<>'') then
Begin
c:=TControl(Control.Children[i]);
if (c.position.X<tp.X) and ((c.Position.X+c.Width)>tp.X) and
(c.position.Y<tp.Y) and ((c.Position.Y+c.Height)>tp.Y)
then result:=c;
End;
if (TControl(Control.Children[i]).ChildrenCount>0) and (result=nil) then result:=GetChildControl(TControl(Control.Children[i]));
End;
end;
End;
begin
vp:=Control.ViewportPosition;
tp.X:=SrcPoint.X+vp.X;
tp.Y:=SrcPoint.Y+vp.Y;
result:=GetChildControl(Control);
end;
//узнаем какой контрол под кликом мышки
procedure TMyFrame.HorzScrollBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var Point:TPointF;
c:TControl;
begin
Point.X:=X;
Point.Y:=Y;
c:=GetControl(HorzScrollBox1,point);
// if c<>nil Then form1.Debug.Add(c.Name);
end;
//узнаем какой контрол под тапком
procedure TMyFrame.HorzScrollBox1Tap(Sender: TObject; const Point: TPointF);
var c:TControl;
begin
c:=GetControl(HorzScrollBox1,point);
// if c<>nil Then form1.Debug.Add(c.Name);
end;