2016-11-21 13 views
6

TPanel 구성 요소에서 사용자 지정 단추를 만들려고합니다. 이를 위해 onmousedown 및 onmouseup 이벤트에 대한 재정의를 제공하고 일부 클릭을 처리하기 위해 onclick 이벤트를 사용했습니다.onmousedown, onmouseup 및 click 이벤트를 사용할 때 모든 클릭을 포착 할 수 없음

불행히도 패널을 빠르게 클릭하면 다른 클릭이 모두 손실되지만 그 이유는 알 수 없습니다.

심지어 가장 쉬운 예제도 이와 관련하여 실패합니다.

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 

가 등등 ... 각각의 두 번째 클릭은 무시 다음과 같이 나는 이벤트를, 새로운 VCL 애플리케이션을 만든 목록 상자, 하나 개의 패널을 추가 및 구현 그러나 나는 이유를 모른다.

누구나 설명 할 수 있습니까?

답변

9

빠르게 클릭하면 패널에서 더블 클릭을 처리합니다. 더블 클릭을 클릭으로 매핑하려면 다음을 사용하십시오.

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

(귀하의 사용자 지정 컨트롤에서 ControlStyle 그것의 생성자에 설정).

csDoubleClicks 제어 수신 및 응답 할 수 메시지를 두 번 클릭합니다. 그렇지 않으면 더블 클릭을 클릭으로 매핑하십시오.

TControl.ControlStyle

를 참조하십시오