2011-07-14 19 views
5

Haskell'de keypress olayı nasıl taklit edilir/taklit edilir?Haskell'de keypress olayı nasıl taklit edilir/taklit edilir?

Gui'mde pencerede bir dizi metin girişi yapmak için kullanmak istediğim bir ekran tuş takımım var. Tuş takımı, düğme widget'larından oluşur ve yapmak istediklerim onButtonClicked işleyicisine keyPressEvent göndermelidir, böylece uygun karakter/sayı, odak içeren metin girişine yazılır. Ben Graphics.UI.Gtk.Gdk.Events bakarak başladık ve ben bu olayı göndermesine nasıl çözemedim bir tuşa basma olayı

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

yaptı. Her neyse, olayın kullanımdan kaldırıldığı ve EventM kullanması gerektiği ortaya çıkıyor. Graphics.UI.Gtk.Abstract.Widget'da widgetEvent :: WidgetClass self => self -> EventM t Bool'u buldum. Api'de:

Nadiren kullanılan işlev. Bu işlev, bir widget üzerindeki olay sinyallerini yaymak için kullanılır (bu sinyalleri kullanmadan bu sinyaller asla verilmemelidir). Bir olayı sentezlemek istiyorsanız, bu işlevi kullanmayın; bunun yerine, mainDoEvent öğesini kullanın; böylece etkinlik, olay sırasındaki gibi davranacaktır.

yüzden Graphics.UI.Gtk.General.General içinde mainDoEvent :: EventM t() baktı ama bir tuş oluşturmak için EventM kullanmak ve kullanılan mainDoEvent bir örneğini bulamadık nasıl olarak emin değilim. Bir kimse bana EventM kullanarak bir tuşa basma olayını nasıl oluşturacağımı ve bunu mainDoEvent'a nasıl ileteceğimi veya başka bir şekilde nasıl yapılacağını önerebilir mi? Teşekkürler.

+5

Bu soru, muhtemelen GTK hakkında Haskell'den daha fazlasıdır. Buradaki önemsiz bir FFI sarmalayıcı aracılığıyla ortaya çıkan görünen API için [here] (http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event) adresine bakın. vaka. –

cevap

1

Bir olay oluşturma, Yanlış Yoldur. Bunun yerine, metin widget'ınız için uygun işlevi kullanarak metninizi eklemelisiniz. Örneğin, TextBuffer s için textBufferInsertAtCursor kullanın.

İlgili konular