在更改帧的父级之后,鼠标事件不会被触发

我正在改变一个框架的父母运行时,将框架从一个窗体移动到另一个窗体。 这工作正常,但之后,我的组件不再收到鼠标事件。 例如, CM_MOUSEENTERCM_MOUSELEAVE不会被触发。

 Frame.Parent := SecondDisplayForm; Frame.Align := alClient; SecondDisplayForm.Show; 

我不明白这个效果,我不知道要提供哪些信息,所以如果你有提示,请在这里帮助我。

它在D7中工作,如NGLN报告的,但在BDS2006中是可重现的。 我发现在cm_mouseenter之后和cm_mouseenter之前更改父级是非常重要的,否则它没有问题。 问题是在controls.pas我想,也许这是一个错误。 玩了一下,我发现,如果你Perform wm_mouseleave消息之前更改父母一切都很好再次。

在我的示例代码中,我更改了onclick事件中的父级。

  TFrame3 = class(TFrame) procedure FrameClick(Sender: TObject); private procedure CMMouseEnter( var msg: TMessage ); message CM_MOUSEENTER; procedure CMMouseLeave( var msg: TMessage ); message CM_MOUSELEAVE; public end; implementation procedure TFrame3.CMMouseEnter(var msg: TMessage); begin inherited; Color := clRed; end; procedure TFrame3.CMMouseLeave(var msg: TMessage); begin inherited; Color := clBlue; end; procedure TFrame3.FrameClick(Sender: TObject); begin if parent = Form1 then begin Perform( WM_MOUSELEAVE, 0, 0 ); parent := Form2; align := alClient; Form1.Hide; Form2.Show; end else begin Perform( WM_MOUSELEAVE, 0, 0 ); parent := Form1; align := alClient; Form2.Hide; Form1.Show; end; end; 

我认为这个问题与Controls.pas中的FMouseControl有关,但没有正确调查。