2016-11-21 29 views
6

Tôi đang cố tạo nút tùy chỉnh trong thành phần TPanel. Đối với điều này, tôi đã cung cấp một ghi đè cho các sự kiện onmousedown và onmouseup (để làm một số bản vẽ), và tôi đã sử dụng sự kiện onclick để xử lý các nhấp chuột.Không thể nhận tất cả các nhấp chuột khi sử dụng các sự kiện onmousedown, onmouseup và nhấp chuột

Thật không may, nếu tôi nhấp nhanh vào bảng điều khiển của mình, mọi nhấp chuột khác đều bị "mất", nhưng tôi không thể hiểu tại sao.

Ngay cả những ví dụ dễ nhất cũng không thành công trong vấn đề này. Tôi tạo ra một ứng dụng VCL mới, thêm một ListBox, một bảng điều khiển, và thực hiện các sự kiện như sau:

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; 

Kết quả như sau:

mouse down 
click 
mouse up 
mouse down 
mouse up 

etcetera ... Mỗi lần nhấp thứ hai được bỏ qua , nhưng tôi không biết tại sao.

Ai đó có thể giải thích điều này không?

Trả lời

9

Bảng điều khiển của bạn đang xử lý nhấp đúp khi bạn nhấp nhanh vào đó. sử dụng:

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

để ánh xạ nhấp đúp vào lần nhấp. (trong bộ điều khiển tùy chỉnh của bạn ControlStyle trong hàm khởi tạo của nó).

csDoubleClicks Việc kiểm soát có thể nhận và trả lời kích đúp vào tin nhắn. Nếu không, hãy nhấp đúp vào các nhấp chuột vào bản đồ.

Xem TControl.ControlStyle

Các vấn đề liên quan