【aarch64-win64】修复aarch64 win64下lazarus不弹出SourceTabPopUpMenu及拖dock时出错的两个bug(2026-07-20更新)
lazarus IDE在win64 on arm64有2个明显的Bug,经跟踪发现TSmallPoint赋值给TPoint有问题。以下方法在没找出真正bug所在位置之前的临时解决方法,很可能是fpc的bug。
1、win64 on arm64下lazarus在Tab鼠标右键点击不会弹出菜单不会弹出菜单
1、win64 on arm64下lazarus在Tab鼠标右键点击不会弹出菜单不会弹出菜单

2、拖dock窗时会出错:
修复方法:
打开\lazarus\lcl\include\control.inc
添加红色代码
2366行:
{------------------------------------------------------------------------------ TControl DoMouseUp "Event Handler" ------------------------------------------------------------------------------} procedure TControl.DoMouseUp(var Message: TLMMouse; Button: TMouseButton); var P: TPoint; MP: TSmallPoint; begin if not (csNoStdEvents in ControlStyle) then begin MP := TSmallPoint(GetMousePosFromMessage(Message.Pos)); if (Button in [mbLeft, mbRight]) and DragManager.IsDragging then begin P := ClientToScreen(MP); DragManager.MouseUp(Button, KeysToShiftState(Message.Keys), P.X, P.Y); Message.Result := 1; end; MouseUp(Button, KeysToShiftState(Message.Keys), MP.X, MP.Y); end; end;
4543行:
{------------------------------------------------------------------------------ TControl WMMouseMove ------------------------------------------------------------------------------} procedure TControl.WMMouseMove(var Message: TLMMouseMove); var MP: TSmallPoint; begin {$IFDEF VerboseMouseBugfix} DebugLn(['[TControl.WMMouseMove] ',Name,':',ClassName,' ',Message.XPos,',',Message.YPos]); {$ENDIF} MP :=TSmallPoint(GetMousePosFromMessage(Message.Pos)); UpdateMouseCursor(MP.X,MP.Y); if not (csNoStdEvents in ControlStyle) then MouseMove(KeystoShiftState(Word(Message.Keys)), MP.X, MP.Y); end;
重构lazarus就可以修复这2个Bug

浙公网安备 33010602011771号