mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 05:18:25 +02:00
LCL: Fix #40416: Mouse Message issue (Enter/Level/Move)
This commit is contained in:
parent
5b6b7955cb
commit
53cd3db19c
@ -1287,7 +1287,7 @@ type
|
|||||||
function IsHelpKeyWordStored: Boolean;
|
function IsHelpKeyWordStored: Boolean;
|
||||||
function IsShowHintStored: Boolean;
|
function IsShowHintStored: Boolean;
|
||||||
function IsVisibleStored: Boolean;
|
function IsVisibleStored: Boolean;
|
||||||
procedure DoBeforeMouseMessage;
|
procedure DoBeforeMouseMessage(TheMessage: TLMessage);
|
||||||
procedure DoConstrainedResize(var NewLeft, NewTop, NewWidth, NewHeight: Integer);
|
procedure DoConstrainedResize(var NewLeft, NewTop, NewWidth, NewHeight: Integer);
|
||||||
procedure SetAccessibleName(AValue: TCaption);
|
procedure SetAccessibleName(AValue: TCaption);
|
||||||
procedure SetAccessibleDescription(AValue: TCaption);
|
procedure SetAccessibleDescription(AValue: TCaption);
|
||||||
|
@ -1583,6 +1583,7 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure ActivateHint(CursorPos: TPoint; CheckHintControlChange: Boolean = False);
|
procedure ActivateHint(CursorPos: TPoint; CheckHintControlChange: Boolean = False);
|
||||||
function GetControlAtMouse: TControl;
|
function GetControlAtMouse: TControl;
|
||||||
|
function GetControlAtPos(P: TPoint): TControl;
|
||||||
procedure ControlDestroyed(AControl: TControl);
|
procedure ControlDestroyed(AControl: TControl);
|
||||||
function BigIconHandle: HIcon;
|
function BigIconHandle: HIcon;
|
||||||
function SmallIconHandle: HIcon;
|
function SmallIconHandle: HIcon;
|
||||||
|
@ -559,7 +559,12 @@ var
|
|||||||
P: TPoint;
|
P: TPoint;
|
||||||
begin
|
begin
|
||||||
GetCursorPos(P);
|
GetCursorPos(P);
|
||||||
//debugln(['TApplication.GetControlAtMouse p=',dbgs(p),' FLastMousePos=',dbgs(FLastMousePos)]);
|
Result:= GetControlAtPos(P);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TApplication.GetControlAtPos(P: TPoint): TControl;
|
||||||
|
begin
|
||||||
|
//debugln(['TApplication.GetControlAtPos p=',dbgs(p),' FLastMousePos=',dbgs(FLastMousePos)]);
|
||||||
if FLastMouseControlValid and (P.X = FLastMousePos.x) and (P.Y = FLastMousePos.Y) then
|
if FLastMouseControlValid and (P.X = FLastMousePos.x) and (P.Y = FLastMousePos.Y) then
|
||||||
Result := FLastMouseControl
|
Result := FLastMouseControl
|
||||||
else
|
else
|
||||||
|
@ -1399,15 +1399,21 @@ end;
|
|||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
procedure TControl.DoBeforeMouseMessage;
|
procedure TControl.DoBeforeMouseMessage;
|
||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
procedure TControl.DoBeforeMouseMessage;
|
procedure TControl.DoBeforeMouseMessage(TheMessage: TLMessage);
|
||||||
var
|
var
|
||||||
|
MouseMessage: TLMMouse absolute TheMessage;
|
||||||
|
P: TPoint;
|
||||||
NewMouseControl: TControl;
|
NewMouseControl: TControl;
|
||||||
begin
|
begin
|
||||||
if Assigned(Application) then
|
if Assigned(Application) then
|
||||||
begin
|
begin
|
||||||
NewMouseControl := GetCaptureControl;
|
NewMouseControl := GetCaptureControl;
|
||||||
if NewMouseControl = nil then
|
if NewMouseControl = nil then
|
||||||
NewMouseControl := Application.GetControlAtMouse;
|
begin
|
||||||
|
P := GetMousePosFromMessage(MouseMessage.Pos);
|
||||||
|
p := ClientToScreen(P);
|
||||||
|
NewMouseControl := Application.GetControlAtPos(P);
|
||||||
|
end;
|
||||||
Application.DoBeforeMouseMessage(NewMouseControl);
|
Application.DoBeforeMouseMessage(NewMouseControl);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -5392,7 +5392,7 @@ begin
|
|||||||
DebugLn('TWinControl.WndPRoc A ',Name,':',ClassName);
|
DebugLn('TWinControl.WndPRoc A ',Name,':',ClassName);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
//if Message.Msg=LM_RBUTTONUP then begin DebugLn(['TWinControl.WndProc ',DbgSName(Self)]); DumpStack end;
|
//if Message.Msg=LM_RBUTTONUP then begin DebugLn(['TWinControl.WndProc ',DbgSName(Self)]); DumpStack end;
|
||||||
DoBeforeMouseMessage;
|
DoBeforeMouseMessage(Message);
|
||||||
if IsControlMouseMSG(Message) then
|
if IsControlMouseMSG(Message) then
|
||||||
Exit
|
Exit
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user