2016-11-21 16 views
6

पर क्लिक कर सकते हैं, मैं एक टीपीनल घटक से कस्टम बटन बनाने की कोशिश कर रहा हूं। इसके लिए, मैंने ऑनमोस्डउन और ऑन-हाउसअप ईवेंट (कुछ ड्राइंग करने के लिए) के लिए ओवरराइड प्रदान किया है, और मैंने क्लिक को संभालने के लिए ऑनक्लिक ईवेंट का उपयोग किया है।ऑनमोसडाउन, ऑनमौसअप का उपयोग करते समय सभी क्लिक नहीं पकड़ सकते हैं और ईवेंट

दुर्भाग्यवश, यदि मैं तेजी से अपने पैनल पर क्लिक करता हूं, तो हर दूसरे क्लिक "खो गया" है, लेकिन मैं यह नहीं समझ सकता कि क्यों।

यहां तक ​​कि सबसे आसान उदाहरण इस संबंध में विफल हो जाते हैं।

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

देखें
संबंधित मुद्दे

 संबंधित मुद्दे