6

我正在尝试从 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

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

有人可以解释一下吗?

4

1 回答 1

9

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

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

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

csDoubleClicks 控件可以接收和响应双击消息。否则,将双击映射为单击。

TControl.ControlStyle

于 2016-11-21T11:53:10.573 回答