gpt4 book ai didi

windows - 更改框架的父项后未触发鼠标事件

转载 作者:可可西里 更新时间:2023-11-01 10:27:52 25 4
gpt4 key购买 nike

我正在更改运行时框架的父级,以将框架从一种形式移动到另一种形式。这工作正常,但之后我的组件不再接收鼠标事件。例如,CM_MOUSEENTERCM_MOUSELEAVE 不会被触发。

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

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

最佳答案

如 NGLN 所报告的,它在 D7 中工作,但在 BDS2006 中它是可重现的。我发现在 cm_mouseenter 之后和 cm_mouseleave 之前更改父项很重要,否则没问题。问题出在 controls.pas 我认为,也许是一个错误。玩了一会儿我发现,如果你在更改父级之前执行 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 有关,但还没有正确调查。

关于windows - 更改框架的父项后未触发鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com