2016-11-21 9 views
6

Próbuję utworzyć niestandardowy przycisk z komponentu TPanel. W tym celu udostępniłem nadpisanie dla zdarzeń onmousedown i onmouseup (w celu wykonania rysunków) i wykorzystałem zdarzenie onclick do obsługi kliknięć.Nie można przechwycić wszystkich kliknięć podczas używania zdarzeń onmousedown, onmouseup i click

Niestety, jeśli szybko kliknę mój panel, każde inne kliknięcie zostanie "utracone", ale nie mogę zrozumieć, dlaczego.

Nawet najłatwiejszy z przykładów zawodzi w tym względzie. I stworzył nową aplikację VCL dodał listbox, jeden panel, a wydarzenia realizowane w następujący sposób:

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; 

Wynik jest następujący:

mouse down 
click 
mouse up 
mouse down 
mouse up 

etcetera ... Każda sekunda kliknięcia pominięte , ale nie mam pojęcia dlaczego.

Czy ktoś może to wyjaśnić?

Odpowiedz

9

Twój panel przetwarza podwójne kliknięcia, gdy szybko go klikniesz. użyj:

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

zamapować podwójne kliknięcia w kliknięcia. (w swoim niestandardowym zestawie kontrolnym ControlStyle w jego konstruktorze).

csDoubleClicks Sterowanie może otrzymać odpowiedzi dwukrotne kliknięcie wiadomości. W przeciwnym razie kliknij dwukrotnie kliknięcia w mapę.

Zobacz TControl.ControlStyle

Powiązane problemy