2016-11-21 6 views
6

Я пытаюсь создать пользовательскую кнопку из компонента TPanel. Для этого я предоставил переопределение для событий onmousedown и onmouseup (чтобы сделать некоторые чертежи), и я использовал событие onclick для обработки кликов.Не удается поймать все клики при использовании onmousedown, onmouseup и событий click

К сожалению, если я быстро нажму на свою панель, каждый другой щелчок «потерян», но я не могу понять, почему.

Даже самые легкие примеры не подходят в этом отношении. Я создал новое приложение VCL, добавил ListBox, одну панель, и реализованы следующие события:

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 

... и так далее Каждый второй щелчок игнорируется , но я понятия не имею, почему.

Может кто-нибудь объяснить это, пожалуйста?

ответ

9

Ваша панель обрабатывает двойные щелчки, когда вы быстро нажимаете на нее. использование:

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

, чтобы нанести двойной щелчок мышью. (в вашем настраиваемом контрольном наборе ControlStyle в его конструкторе).

csDoubleClicks управления может принимать и реагировать на двойной щелчок сообщения. В противном случае дважды щелкните клики на клики.

TControl.ControlStyle См