我正在使用haskell和gtk2hs。如何在haskell中獲得keydown和keyup事件?
有沒有辦法讓keydown/keyup事件(keystate是一樣的好; keypress事件不是)與那些?
我正在使用haskell和gtk2hs。如何在haskell中獲得keydown和keyup事件?
有沒有辦法讓keydown/keyup事件(keystate是一樣的好; keypress事件不是)與那些?
這些進口將是必要的
import Graphics.UI.Gtk.Abstract.Widget
import Graphics.UI.Gtk.Gdk.Events
那麼這是怎麼到keyRelease活動(一些簡單的例子)迴應:
let handler event = do
case event of
(Key _ _ _ _ _ _ _ _ _ (Just char)) -> case char of
'a' -> doSomething
_ -> return() --or whatever type the other cases have
_ -> return()
return True
onKeyRelease widget handler
許多忽略模式將包含不適合基本信息簡單的事件處理程序。
這裏是如何的一個關鍵的狀態可以被追蹤:
isPressedA <- newIORef False
let handler event = do
case event of
(Key released _ _ _ _ _ _ _ _ (Just char)) -> case char of
'a' -> writeIORef isPressedA (not released)
_ -> return()
_ -> return()
return True
onKeyPress window handler
onKeyRelease window handler
釋放的包含密鑰是否被釋放或按壓,將相同的處理可以爲這兩個事件的工作。
我做了這個代碼來響應窗口的關鍵事件,而不是一些小部件,避免了按鍵和keyRelease不同部件註冊
獲得在keyDown(切換事件之間的窗口時,它仍然是可能的,雖然)事件可以通過追蹤自上次keyPress以來是否存在keyRelease來完成。
嗨,我試圖用你的解決方案來獲取任何關鍵事件,但我不知道如何使用Cabal來安裝Graphics.UI.Gtk.Abstract.Widget和Events。沒有找到包裹名稱,你能幫我嗎?此外,這部分代碼繼續在Main上,對吧?謝謝 – alitalvez
http://hackage.haskell.org/package/gtk-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:onKeyRelease? – leftaroundabout
工作。沒有找到它。 –
好。考慮自己張貼您的解決方案作爲答案;這可能對其他人非常有用。 – leftaroundabout