2012-02-23 16 views
16

यदि माउस बटन दबाया जाता है और एक विंडो दिखायी जाती है कि माउस बटन जारी होने पर विंडो को माउसअप ईवेंट प्राप्त होगा।पता लगाएं कि फॉर्म से पहले माउस बटन पहले ही दबाया गया है

खिड़की दिखाए जाने के बाद, क्या माउस बटन पहले से दबाया गया है या नहीं, यह पता लगाना संभव है?

+0

आप GetAsyncKeyState (VK_LBUTTON) – ComputerSaysNo

+5

पर ध्यान देना चाहते हैं ध्यान दें कि 'GetAsyncKeyState' भौतिक माउस बटन स्थिति देता है, जबकि' GetKeyState' तार्किक लौटाता है (माउस में 'स्विच प्राथमिक और द्वितीयक बटन' विकल्प में आपने क्या सेट किया है सेटिंग्स)। – TLama

उत्तर

16

मैं यह कोशिश करेंगे:

procedure TForm1.FormShow(Sender: TObject); 
begin 
    if GetKeyState(VK_LBUTTON) and $8000 <> 0 then 
    ShowMessage('Left mouse button is pressed...') 
    else 
    ShowMessage('Left mouse button is not pressed...') 
end; 
+3

धन्यवाद, यह सही है .... लगभग। GetKeyState के परिणाम की तुलना $ 8000 (http://stackoverflow.com/a/3422706/41338 देखें) की तुलना करने के लिए की जाती है ताकि यह जांच सके कि सही बिट सेट हैं या नहीं। – RobS

+0

आप निश्चित रूप से सही हैं। धन्यवाद! मैं पोस्ट अपडेट करूंगा। भ्रामक के लिए खेद है। – TLama

+2

+1 को समझने के लिए कैसे – EMBarbosa

9

सीधे अपने सवाल का जवाब करने के लिए, आप GetKeyState या GetAsyncKeyState साथ माउस बटन राज्य के लिए परीक्षण कर सकते हैं। आपको आवश्यक वर्चुअल कुंजी कोड VK_LBUTTON है।

इनके बीच का अंतर यह है कि GetKeyState उस समय राज्य की रिपोर्ट करता है जब वर्तमान में सक्रिय कतार संदेश आपके कतार में पोस्ट किया गया था। दूसरी तरफ, GetAsynchKeyState आपको तत्काल राज्य देता है कि आप GetAsynchKeyState पर कॉल करते हैं।

GetKeyState के प्रलेखन से:

कुंजी स्थिति इस समारोह में परिवर्तन से लौटे के रूप में एक धागा अपने संदेश कतार से महत्वपूर्ण संदेश पढ़ता है। स्थिति हार्डवेयर से जुड़े इंटरप्ट-स्तरीय स्थिति को प्रतिबिंबित नहीं करती है। उस जानकारी को पुनर्प्राप्त करने के लिए GetAsyncKeyState फ़ंक्शन का उपयोग करें। एक एप्लिकेशन कीबोर्ड-इनपुट संदेश के जवाब में GetKeyState को कॉल करता है। इनपुट संदेश उत्पन्न होने पर यह फ़ंक्शन कुंजी की स्थिति पुनर्प्राप्त करता है।

मुझे लगता है कि आप GetKeyState का उपयोग करना चाहिए, लेकिन मैं 100% यकीन है कि क्योंकि मैं वास्तव में नहीं जानते कि तुम क्या इस जानकारी के साथ प्राप्त करने के लिए कोशिश कर रहे हैं नहीं हो सकता।

+0

दो कार्यों के बीच अंतर के उपयोगी स्पष्टीकरण के लिए धन्यवाद। आप सही हैं कि GetKeyState मुझे चाहिए। मुझे इसकी आवश्यकता क्यों है, इस बारे में सुस्त अतिरिक्त जानकारी यह है कि मैं एक फॉर्म बना रहा हूं जिसका आउटपुट अंतिम माउस बटन पर आधारित है। मूल रूप से मैं माउस बटनों की गिनती कर रहा था क्योंकि उन्हें दबाया गया था और उन्हें रिलीज़ के रूप में गिनती थी लेकिन फॉर्म दिखाए जाने से पहले कभी-कभी माउस बटनों में से एक दबाया जा सकता था। हालांकि, इस कमांड का मतलब है कि अब मैं प्रत्येक माउसअप ईवेंट पर जांच कर सकता हूं कि क्या कोई अन्य माउस बटन अभी भी दबाया गया है। क्यों समझाने के लिए – RobS

+2

+1 – EMBarbosa

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