Я использую haskell и gtk2hs.Как получить события keydown и keyup в haskell?
Есть ли способ получить события keydown/keyup (keystate так же хорошо, что и событие нажатия клавиши)?
Я использую haskell и gtk2hs.Как получить события keydown и keyup в haskell?
Есть ли способ получить события keydown/keyup (keystate так же хорошо, что и событие нажатия клавиши)?
этот импорт будет необходим
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
высвобождаемой содержит ли освобождено или нажата клавиша, так и тот же обработчик может работать для обоих событий.
Я сделал этот код отреагировал на ключевые события в окно, а не некоторых виджетов, чтобы избежать Keypress и keyRelease регистрации на различных виджетов (это еще возможно, хотя при переключении окон между событиями)
получить KeyDown событие может быть выполнено путем отслеживания того, было ли keyRelease с момента последнего нажатия клавиши.
Привет, я пытаюсь использовать ваше решение для получения какого-либо ключевого события, но я не знаю, как установить Graphics.UI.Gtk.Abstract.Widget и Events с помощью Cabal. Не нашел там название пакета, не могли бы вы мне помочь? Кроме того, эта часть кода распространяется на Main, верно? благодаря – alitalvez
http://hackage.haskell.org/package/gtk-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:onKeyRelease? – leftaroundabout
Это работает. Не нашел его. –
Хорошо. Рассмотрите отправку своего решения как ответ самостоятельно; это может быть очень полезно для других людей. – leftaroundabout