2009-04-14 17 views
7

यदि मैं KeyboardEvent.KEY_DOWN में श्रोता जोड़ता हूं, तो मैं कुंजीकोड और चारकोड ढूंढ सकता हूं।चरित्र दबाए गए कुंजी का पता लगाएं

कुंजीकोड कीबोर्ड के आधार पर एक अलग चरित्र के लिए नक्शे।

charCode बस के रूप में बेकार है, मदद के अनुसार:

चरित्र कोड मूल्यों अंग्रेजी कीबोर्ड मान हैं। उदाहरण के लिए, यदि आप Shift + 3 दबाते हैं, तो एक जापानी कीबोर्ड पर charCode # है, जैसा कि यह एक अंग्रेज़ी कीबोर्ड पर है।

तो, मैं कैसे पता लगा सकता हूं कि उपयोगकर्ता किस चरित्र को दबाता है?

उत्तर

2

आप उद्धरण की एक बहुत ही महत्वपूर्ण हिस्सा बाहर छोड़ दिया है या जहां यह पाया यह याद आ रही थी:

उदाहरण के लिए, यदि आप Shift + 3, getASCIICode() प्रणाली पर रिटर्न # जापानी कीबोर्ड, जैसा कि यह पर एक अंग्रेज़ी कीबोर्ड पर करता है।

http://livedocs.adobe.com/flex/201/langref/flash/events/KeyboardEvent.html

यह शायद अधिक उपयोगी है:

UTF-8,

charCode संपत्ति वर्तमान वर्ण सेट में उस कुंजी का सांख्यिक मान है (डिफ़ॉल्ट वर्ण सेट है जो समर्थन करता है ASCII)।

http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000480.html

आपका आवेदन क्या सेट पात्रों प्रयोग किया जाता है, जिसका अर्थ है कि आप अलग अलग कुंजीपटल स्थानीय लोगों की अलग कुंजी का उपयोग करने के लिए एक ही चरित्र का उत्पादन किया है, भले ही यह एक ही charCode होगा निर्धारित करता है।

+0

लिंक पुराने हो गए हैं और वैसे भी उपयोगी नहीं हैं:

कि इस पोस्ट मुझे उस समाधान के लिए संकेत दिया उल्लेख करना भूल। मेरी प्रतिक्रिया देखें। –

0

टाइपिंग जापानी हिरागाना आदि पात्रों को अक्सर कई कीस्ट्रोक की आवश्यकता होती है और कभी-कभी ड्रॉप डाउन मेनू से उपयुक्त चरित्र का चयन भी किया जाता है। आप शायद एक अलग घटना के लिए सुनना चाहते हैं, कुछ टेक्स्टफील्ड की परिवर्तन घटना की तरह।

1

नोट: (। यह सामान्य रूप से कुंजीपटल संदेशों के बारे में है और अकेले actionscript पर लागू नहीं होता मैं प्रश्न पढ़ने में भूलना और प्रदान की एक गहरी जवाब तो मददगार था)

वास्तव में, विंडोज़ चार करने के लिए कीबोर्ड से पथ एक है बहुत ही जटिल, यह इस तरह कुछ जाता है:

  • कीबोर्ड कीबोर्ड डिवाइस ड्राइवर (केडीडी) में स्कैनकोड भेजता है।
  • केडीडी सिस्टम संदेश कतार में एक संदेश भेजता है।
  • सिस्टम तब संदेश को अग्रभूमि थ्रेड पर भेजता है जिसने वर्तमान कीबोर्ड फोकस के साथ विंडो बनाई है।
  • थ्रेड का संदेश पाश संदेश को उठाता है और सही चरित्र अनुवाद को आंकड़े करता है।

'असली' चार कि आपके द्वारा लिखा गया था की गणना नहीं है, जब तक यह है कि पूरी प्रक्रिया पूर्ण होने पर, प्रत्येक विंडो के रूप में और धागा एक अलग स्थान पर हो सकता है और आप वास्तव में नहीं स्थान जानने के बिना कुंजी 'का अनुवाद' कर सकते हैं और कुंजी बफर इतिहास।

"WM_KEYDOWN" और "WM_KEYUP" संदेशों को केवल MapVirtualKey या कुछ के साथ परिवर्तित नहीं किया जा सकता है क्योंकि आप नहीं जानते कि कितने महत्वपूर्ण प्रेस एक सिंगल बनाते हैं। सरल विधि सिर्फ 'WM_CHAR' ईवेंट को संभालती है और इसका उपयोग करती है। पर विचार करें निम्नलिखित:

  • en-US स्थान, तो आपको निम्न कुंजियाँ दबाएँ + a '+ a, तो आपको निम्न उत्पादन "a'a"
  • pt-BZ स्थान, तो आपको निम्न कुंजी एक प्रेस मिल + '+ a, तो आपको निम्न उत्पादन' एए '

मिलता तो दोनों उदाहरणों में आप 3 keydown, KeyUp संदेश प्राप्त होगा, लेकिन पहले आप 3 WM_CHAR हो और दूसरे में आप केवल 2.

मिल

निम्नलिखित लेख मूलभूत अवधारणाओं के लिए वास्तव में अच्छा है: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

1

आप दर्ज किए गए वर्ण को निर्धारित करने के लिए charCode या keyCode का प्रभावी ढंग से उपयोग नहीं कर सकते हैं। आपको केवल तारों की तुलना करनी चाहिए। KeyboardEvent आपको दर्ज टेक्स्ट नहीं देता है, जो कि मूर्ख भी है।

मेरे मामले में मैंने TextEvent.TEXT_INPUT ईवेंट के अलावा KeyboardEvent.KEY_DOWN ईवेंट लागू किया। बाद के लिए हैंडलर में मैंने सभी कार्यक्षमताओं को लागू किया जहां charCode की आवश्यकता थी और प्रति कीबोर्ड लोकेल (उदाहरण के लिए स्पेस बार या एंटर) में भिन्नता नहीं थी। पूर्व में मैंने घटना की टेक्स्ट प्रॉपर्टी की जांच की जो मुझे लोकेल स्वतंत्र की तुलना में तुलना करने के लिए किया गया था। How to find out the character pressed key in languages?

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