साथ में कीबोर्ड इवेंट्स माउस घटनाओं, आपके प्रोग्राम के साथ उपयोगकर्ता के संपर्क के प्राथमिक तत्व हैं।
नीचे तीन घटनाओं की जानकारी दी गई है, जो आपको डेल्फी एप्लिकेशन में उपयोगकर्ता के कीस्ट्रोक्स को कैप्चर करने देती हैं: OnKeyDown, onkeyup तथा OnKeyPress.
डाउन, अप, प्रेस, डाउन, अप, प्रेस...
डेल्फी एप्लिकेशन कीबोर्ड से इनपुट प्राप्त करने के लिए दो तरीकों का उपयोग कर सकते हैं। यदि किसी उपयोगकर्ता को किसी एप्लिकेशन में कुछ टाइप करना है, तो उस इनपुट को प्राप्त करने का सबसे आसान तरीका है कि आप उन नियंत्रणों में से एक का उपयोग करें, जो स्वचालित रूप से keypress पर प्रतिक्रिया देता है, जैसे कि Edit।
अन्य समयों पर और अधिक सामान्य उद्देश्यों के लिए, हालाँकि, हम एक ऐसे रूप में प्रक्रियाएँ बना सकते हैं जो तीन घटनाओं को रूपों द्वारा और कीबोर्ड इनपुट को स्वीकार करने वाले किसी भी घटक द्वारा संभालती है। हम इन ईवेंट के लिए ईवेंट हैंडलर लिख सकते हैं, जो किसी भी कुंजी या कुंजी संयोजन का जवाब देने के लिए उपयोगकर्ता रनटाइम पर दबा सकता है।
ये हैं वे घटनाएँ:
OnKeyDown - कीबोर्ड पर कोई भी कुंजी दबाने पर कॉल किया जाता है
onkeyup - जब कीबोर्ड पर कोई कुंजी जारी की जाती है तो उसे कॉल किया जाता है
OnKeyPress - जब ASCII वर्ण के अनुरूप एक कुंजी को दबाया जाता है
कीबोर्ड हैंडलर्स
सभी कीबोर्ड इवेंट में एक है पैरामीटर आम में। चाभी पैरामीटर कीबोर्ड पर कुंजी है और इसे दबाए गए कुंजी के मूल्य के संदर्भ में पास करने के लिए उपयोग किया जाता है। खिसक जाना पैरामीटर (में OnKeyDown तथा onkeyup प्रक्रियाओं) इंगित करता है कि क्या Shift, Alt, या Ctrl कुंजी को कीस्ट्रोक के साथ जोड़ा जाता है।
भेजने वाला पैरामीटर विधि को कॉल करने के लिए उपयोग किए गए नियंत्रण का संदर्भ देता है।
प्रक्रिया TForm1.FormKeyDown (प्रेषक: Tobject; वर कुंजी: शब्द; पारी: TShiftState);... प्रक्रिया TForm1.FormKeyUp (प्रेषक: TObject; वर कुंजी: शब्द; पारी: TShiftState);... प्रक्रिया TForm1.FormKeyPress (प्रेषक: Tobject; वर कुंजी: चार);
जब उपयोगकर्ता शॉर्टकट या त्वरक कुंजियों को दबाता है, तो जवाब देना, जैसे कि मेनू कमांड के साथ प्रदान किए गए, इवेंट हैंडलर लिखने की आवश्यकता नहीं है।
फोकस क्या है?
फोकस के माध्यम से उपयोगकर्ता इनपुट प्राप्त करने की क्षमता है चूहा या कीबोर्ड। केवल उस वस्तु पर ध्यान केंद्रित किया जा सकता है जिसमें कीबोर्ड ईवेंट हो सकता है। इसके अलावा, प्रति प्रपत्र केवल एक घटक सक्रिय हो सकता है, या किसी भी समय चल रहे एप्लिकेशन में फ़ोकस हो सकता है।
कुछ घटक, जैसे कि TImage, TPaintBox, TPanel तथा TLabel फोकस प्राप्त नहीं कर सकते। सामान्य तौर पर, इससे प्राप्त घटक TGraphicControl फोकस प्राप्त करने में असमर्थ हैं। इसके अतिरिक्त, घटक जो रन टाइम पर अदृश्य होते हैं (TTimer) फोकस प्राप्त नहीं कर सकता।
OnKeyDown, OnKeyUp
OnKeyDown तथा onkeyup ईवेंट्स कीबोर्ड की प्रतिक्रिया का न्यूनतम स्तर प्रदान करते हैं। दोनों OnKeyDown तथा onkeyup हैंडलर सभी कीबोर्ड कुंजियों का जवाब दे सकता है, जिसमें फ़ंक्शन कुंजियों और कुंजी के साथ संयुक्त है खिसक जाना, ऑल्ट, तथा Ctrl चांबियाँ।
कीबोर्ड ईवेंट परस्पर अनन्य नहीं हैं। जब उपयोगकर्ता एक कुंजी दबाता है, दोनों OnKeyDown तथा OnKeyPress घटनाएँ उत्पन्न होती हैं, और जब उपयोगकर्ता कुंजी जारी करता है, तो onkeyup घटना उत्पन्न होती है। जब उपयोगकर्ता किसी एक कुंजी को दबाता है जो OnKeyPress पता नहीं है, केवल OnKeyDown घटना होती है, उसके बाद onkeyup प्रतिस्पर्धा।
यदि आप एक कुंजी रखते हैं, तो onkeyup घटना सभी के बाद होती है OnKeyDown तथा OnKeyPress घटनाएँ हुई हैं।
OnKeyPress
OnKeyPress ने 'g' और 'G' के लिए एक अलग ASCII कैरेक्टर दिया, लेकिन OnKeyDown तथा onkeyup अपरकेस और लोअरकेस अल्फा कीज़ के बीच अंतर न करें।
कुंजी और शिफ्ट पैरामीटर
के बाद से चाभी पैरामीटर संदर्भ द्वारा पारित किया जाता है, घटना हैंडलर बदल सकता है चाभी ताकि एप्लिकेशन को ईवेंट में शामिल होने के रूप में एक अलग कुंजी दिखाई दे। यह उन प्रकारों को सीमित करने का एक तरीका है जो उपयोगकर्ता इनपुट कर सकता है, जैसे कि उपयोगकर्ताओं को अल्फा कीज़ टाइप करने से रोकना।
अगर चाभी में ['ए'.. 'जेड'] + [ए ’..’ जेड ’] फिर की: = # ०
उपरोक्त कथन जाँच करता है कि क्या चाभी पैरामीटर दो सेटों के संघ में है: लोअरकेस वर्ण (यानी) ए के माध्यम से z) और अपरकेस वर्ण (A-Z). यदि हां, तो कथन शून्य से वर्ण मान प्रदान करता है चाभी किसी भी इनपुट को रोकने के लिए संपादित करें घटक, उदाहरण के लिए, जब यह संशोधित कुंजी प्राप्त करता है।
गैर-अल्फ़ान्यूमेरिक कुंजियों के लिए, WinAPI आभासी कुंजी कोड दबाया कुंजी निर्धारित करने के लिए इस्तेमाल किया जा सकता है। विंडोज प्रत्येक कुंजी के लिए विशेष स्थिरांक को परिभाषित करता है जिसे उपयोगकर्ता दबा सकता है। उदाहरण के लिए, VK_RIGHT राइट एरो की के लिए वर्चुअल की कोड है।
कुछ विशेष कुंजी की प्रमुख स्थिति प्राप्त करने के लिए जैसे टैब या पन्ना ऊपर, हम उपयोग कर सकते हैं GetKeyState विंडोज एपीआई कॉल। मुख्य स्थिति निर्दिष्ट करती है कि क्या कुंजी ऊपर, नीचे, या टॉगल की गई है (हर बार कुंजी दबाए जाने पर बारी-बारी से)।
अगर HiWord (GetKeyState (vk_PageUp)) <> 0 फिर
ShowMessage ('PageUp - DOWN')
अन्य
शो मेसेज ('पेजअप - यूपी');
में OnKeyDown तथा onkeyup आयोजन, चाभी एक अहस्ताक्षरित Word मान है जो Windows वर्चुअल कुंजी का प्रतिनिधित्व करता है। ताकि चरित्र मूल्य प्राप्त हो सके चाभी,हम उपयोग करते हैं Chr समारोह। में OnKeyPress प्रतिस्पर्धा, चाभी एक है चार मान जो ASCII वर्ण का प्रतिनिधित्व करता है।
दोनों OnKeyDown तथा onkeyup ईवेंट प्रकार के शिफ्ट पैरामीटर का उपयोग करते हैं TShiftState, एक कुंजी दबाए जाने पर Alt, Ctrl, और Shift कुंजी की स्थिति निर्धारित करने के लिए एक सेट झंडे।
उदाहरण के लिए, जब आप Ctrl + A दबाते हैं, तो निम्नलिखित प्रमुख घटनाएं उत्पन्न होती हैं:
कीडाउन (Ctrl) // ssCtrl
कीडाउन (Ctrl + A) // ssCtrl + 'A'कीप (ए) कीप (Ctrl + A)
प्रपत्र पर कुंजीपटल ईवेंट पुनर्निर्देशित करना
कीस्ट्रोक्स को फॉर्म के स्तर पर फँसाने के बजाय उन्हें फॉर्म के घटकों में पास करने के लिए, फॉर्म का सेट करें KeyPreview ट्रू को संपत्ति (का उपयोग करके) वस्तु निरीक्षक). घटक अभी भी घटना को देखता है, लेकिन फॉर्म में पहले इसे संभालने का अवसर है - उदाहरण के लिए, दबाए जाने के लिए कुछ कुंजी को अनुमति देने या अस्वीकार करने के लिए।
मान लीजिए कि आपके पास एक फ़ॉर्म पर कई संपादन घटक हैं और प्रपत्र। OnKeyPress प्रक्रिया इस तरह दिखती है:
प्रक्रियाTForm1.FormKeyPress (प्रेषक: Tobject; वर कुंजी: चार); शुरूअगर चाभी में ['0'..'9'] फिर की: = # ०। समाप्त;
अगर किसी एक एडिट कंपोनेंट में है फोकस, और यह KeyPreview एक फॉर्म की संपत्ति गलत है, यह कोड निष्पादित नहीं करेगा। दूसरे शब्दों में, यदि उपयोगकर्ता दबाता है 5 कुंजी, 5 चरित्र केंद्रित संपादन घटक में दिखाई देगा।
हालांकि, यदि KeyPreview ट्रू पर सेट है, फिर फॉर्म का OnKeyPress ईवेंट घटक को कुंजी को दबाने से पहले ईवेंट निष्पादित किया जाता है। फिर, अगर उपयोगकर्ता ने दबाया है 5 कुंजी, तब यह शून्य से वर्ण का मान निर्दिष्ट करता है ताकि संख्यात्मक इनपुट को संपादित घटक में रोका जा सके।