2011-07-14 10 views
5

हास्केल में कुंजीपटल ईवेंट को अनुकरण/स्पूफ कैसे करें?हास्केल में कुंजीपटल ईवेंट को अनुकरण/स्पूफ कैसे करें?

मेरे पास मेरे गुई में एक ऑनस्क्रीन नंबर कीपैड है जिसे मैं विंडो में कई टेक्स्ट एंट्री लिखने के लिए उपयोग करना चाहता हूं। कीपैड बटन विगेट्स से बना है और मैं क्या करना चाहता हूं onButtonClicked हैंडलर keyPressEvent भेजें ताकि उचित char/संख्या टेक्स्ट प्रविष्टि में लिखी गई हो जो फोकस हो। मैं Graphics.UI.Gtk.Gdk.Events को देखकर शुरू कर दिया और एक कुंजी दबाने घटना

Event my1Event = Key True True Graphics.UI.Gtk.Gdk.Events.currentTime [] False False False 0xffb1 "KP_1" Nothing 

मैं समझ नहीं सकता है इस घटना प्रेषण करने के लिए कैसे बना दिया। वैसे भी यह पता चला है कि इवेंट को बहिष्कृत किया गया है और इवेंटएम का उपयोग करना चाहिए। मुझे Graphics.UI.Gtk.Abstract.Widget में widgetEvent :: WidgetClass self => self -> EventM t Bool मिला। एपीआई में यह कहता है:

दुर्लभ रूप से उपयोग किया गया फ़ंक्शन। इस फ़ंक्शन का उपयोग विजेट पर इवेंट सिग्नल को उत्सर्जित करने के लिए किया जाता है (ऐसा करने के लिए इस फ़ंक्शन का उपयोग किये बिना उन संकेतों को कभी भी उत्सर्जित नहीं किया जाना चाहिए)। यदि आप किसी ईवेंट को संश्लेषित करना चाहते हैं, तो इस फ़ंक्शन का उपयोग न करें; इसके बजाय, mainDoEvent का उपयोग करें ताकि ईवेंट व्यवहार करेगा जैसे कि यह ईवेंट कतार में था।

तो मैं Graphics.UI.Gtk.General.General में mainDoEvent :: EventM t() को देखा लेकिन कैसे EventM उपयोग करने के लिए एक कुंजी दबाने बनाने के लिए और उपयोग में mainDoEvent का एक उदाहरण नहीं मिल सका के रूप में लेकर अनिश्चित हूं। क्या कोई मुझे सलाह दे सकता है कि EventM का उपयोग करके एक कीप्रेस ईवेंट कैसे बनाएं और इसे mainDoEvent पर पास करें या ऐसा करने का कोई अन्य तरीका? धन्यवाद।

+5

यह सवाल संभवतः जीएसके के बारे में हैस्केल की तुलना में अधिक है। अंतर्निहित एपीआई के लिए [यहां] (http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event) देखें, जो इस में एक छोटे से एफएफआई रैपर के माध्यम से उजागर होता प्रतीत होता है मामला। –

उत्तर

1

एक घटना उत्पन्न करना गलत तरीका है। इसके बजाय, आपको अपने टेक्स्ट विजेट के लिए उचित फ़ंक्शन का उपयोग करके अपना टेक्स्ट डालना चाहिए। उदाहरण के लिए, TextBuffer एस के लिए, textBufferInsertAtCursor का उपयोग करें।

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