diff --git a/lcl/controls.pp b/lcl/controls.pp index ebb65d7ede..1db8090288 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -3226,7 +3226,7 @@ begin begin // runtime - handle multi clicks according to ControlStyle if LastMouse.ClickCount > 1 then begin - TargetControl := AWinControl.ControlAtPos(AWinControl.ScreenToClient(AMousePos), [capfHasScrollOffset]); + TargetControl := AWinControl.ControlAtPos(AWinControl.ScreenToClient(AMousePos), []); if TargetControl=nil then TargetControl := AWinControl; case LastMouse.ClickCount of @@ -3394,8 +3394,7 @@ begin begin Result := WinControl; Control := WinControl.ControlAtPos(WinControl.ScreenToClient(Position), - [capfAllowWinControls, capfRecursive, - capfHasScrollOffset] + DisabledFlag[AllowDisabled]); + [capfAllowWinControls, capfRecursive] + DisabledFlag[AllowDisabled]); //debugln(['FindControlAtPosition ',dbgs(Position),' ',DbgSName(WinControl),' ',dbgs(WinControl.ScreenToClient(Position)),' ',DbgSName(Control)]); if Assigned(Control) then Result := Control; diff --git a/lcl/forms.pp b/lcl/forms.pp index 4bb5e7b8a3..7ece60b4e0 100644 --- a/lcl/forms.pp +++ b/lcl/forms.pp @@ -182,7 +182,6 @@ type public constructor Create(TheOwner : TComponent); override; destructor Destroy; override; - function ControlAtPos(const Pos: TPoint; Flags: TControlAtPosFlags): TControl; override; function ScreenToClient(const APoint: TPoint): TPoint; override; function ClientToScreen(const APoint: TPoint): TPoint; override; procedure UpdateScrollbars; diff --git a/lcl/include/scrollingwincontrol.inc b/lcl/include/scrollingwincontrol.inc index 96d9178890..5a4f66a8c6 100644 --- a/lcl/include/scrollingwincontrol.inc +++ b/lcl/include/scrollingwincontrol.inc @@ -316,12 +316,6 @@ begin inherited Destroy; end; -function TScrollingWinControl.ControlAtPos(const Pos: TPoint; - Flags: TControlAtPosFlags): TControl; -begin - Result := inherited ControlAtPos(Pos, Flags - [capfHasScrollOffset]); -end; - function TScrollingWinControl.ScreenToClient(const APoint: TPoint): TPoint; var P: TPoint; diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index bb86c1b625..32b1d9738f 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -5151,21 +5151,15 @@ var function GetControlAtPos(AControl: TControl): Boolean; var ControlPos: TPoint; - ControlClientBounds: TRect; begin with AControl do begin - // MG: Delphi checks for PtInRect(ClientRect,P). But the client area is - // not always at 0,0, so I guess this is a bug in the VCL. - ControlPos := Point(P.X - Left, P.Y - Top); Result := (ControlPos.X >= 0) and (ControlPos.Y >= 0) and (ControlPos.X < Width) and (ControlPos.Y < Height); + if Result and (capfOnlyClientAreas in Flags) then - begin - ControlClientBounds := GetChildrenRect(false); - Result:=PtInRect(ControlClientBounds, ControlPos); - end; + Result := PtInRect(ClientRect, ControlPos); Result := Result and ( @@ -8424,7 +8418,7 @@ begin begin // don't allow disabled and don't search wincontrols - they receive their // message themself - Child := ControlAtPos(ScreenToClient(SmallPointToPoint(Message.Pos)), [capfHasScrollOffset]); + Child := ControlAtPos(ScreenToClient(SmallPointToPoint(Message.Pos)), []); if Assigned(Child) then with Message do begin