gpt4 book ai didi

windows - MouseLeave 事件不适用于按下左键单击

转载 作者:可可西里 更新时间:2023-11-01 14:42:35 26 4
gpt4 key购买 nike

我正在用 Delphi 做一个测试 VCL 应用程序。我有一个带有标签的空表单,我使用表单 FormMouseLeave 事件更改了该标签值。它有效,但如果我在离开表单时按住鼠标左键,则不会触发该事件。

我尝试拦截 WM_MOUSELEAVE 消息,但看起来它根本没有被触发(嗯,我猜 FormMouseLeave 事件是基于该消息)

我不需要触发任何拖放,我只需要鼠标离开我的表单并按下左键单击时的事件,我该怎么做?

最佳答案

这是 WM_MOUSELEAVE 消息的已知行为。您可以通过跟踪鼠标移动来规避它,当鼠标离开边界时您可以自己触发事件。

当您按下鼠标按钮时,您的窗口(窗体)将捕获鼠标并将接收 WM_MOUSEMOVE 事件,即使鼠标超出其范围也是如此。 WM_MOUSELEAVE 消息用于在您没有捕获鼠标时跟踪窗口内的鼠标。

如果您将 MouseEnterMouseLeaveMouseMove 事件分配给您的表单,您可以执行如下操作:

procedure TForm1.FormMouseEnter(Sender: TObject);
begin
Label1.Caption := '';
end;

procedure TForm1.FormMouseLeave(Sender: TObject);
begin
Label1.Caption := 'left';
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if not PtInRect(ClientRect, TPoint.Create(x, y)) then Label1.Caption := 'left move';
end;

关于windows - MouseLeave 事件不适用于按下左键单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350746/

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