gpt4 book ai didi

delphi - 使用 onmousedown、onmouseup 和 click 事件时无法捕获所有点击

转载 作者:行者123 更新时间:2023-12-03 14:58:39 27 4
gpt4 key购买 nike

我正在尝试从 TPanel 组件创建自定义按钮。为此,我提供了 onmousedown 和 onmouseup 事件的替代(以进行一些绘图),并使用 onclick 事件来处理点击。

不幸的是,如果我快速单击面板,其他所有单击都会“丢失”,但我不明白为什么。

即使是最简单的例子在这方面也失败了。我创建了一个新的 VCL 应用程序,添加了一个列表框、一个面板,并实现了以下事件:

procedure TForm1.Panel1Click(Sender: TObject);
begin
listbox1.Items.Add('click');
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
listbox1.Items.Add('mouse down');
end;

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
listbox1.Items.Add('mouse up');
end;

结果如下:

mouse down
click
mouse up
mouse down
mouse up

等等...每一秒的点击都会被忽略,但我不知道为什么。

谁能解释一下吗?

最佳答案

当您快速单击面板时,您的面板正在处理双击。使用:

Panel1.ControlStyle := Panel1.ControlStyle - [csDoubleClicks]

将双击映射为单击。 (在您的自定义控件的构造函数中设置ControlStyle)。

csDoubleClicks The control can receive and respond to double-click messages. Otherwise, map double-clicks into clicks.

参见TControl.ControlStyle

关于delphi - 使用 onmousedown、onmouseup 和 click 事件时无法捕获所有点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719198/

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