J'utilise haskell et gtk2hs.Comment obtenir les événements keydown et keyup dans haskell?
Existe-t-il un moyen d'obtenir des événements keydown/keyup (keystate est tout aussi bon, l'événement keypress n'est pas) avec ceux-ci?
J'utilise haskell et gtk2hs.Comment obtenir les événements keydown et keyup dans haskell?
Existe-t-il un moyen d'obtenir des événements keydown/keyup (keystate est tout aussi bon, l'événement keypress n'est pas) avec ceux-ci?
ces importations seront nécessaires
import Graphics.UI.Gtk.Abstract.Widget
import Graphics.UI.Gtk.Gdk.Events
alors c'est de savoir comment répondre aux KeyRelease événements (certains exemples simples):
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
les nombreux ignorent les modèles contiendraient des informations qui ne sont pas essentiels pour gestionnaires d'événements simples.
Voilà comment l'état d'une clé peut être suivi:
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
Le sort contient si la clé a été libéré ou pressée, de sorte que le même gestionnaire peut travailler pour les deux événements.
J'ai fait ce code réagisse à des événements clés de la fenêtre, plutôt que certains widgets', pour éviter les keyPress et l'enregistrement KeyRelease sur différents widgets (il est toujours possible que lors du passage des fenêtres entre les événements)
obtenir un keyDown L'événement peut être fait en suivant s'il y a eu un keyRelease depuis le dernier keyPress.
Salut, j'essaie d'utiliser votre solution pour obtenir un événement clé, mais je ne sais pas comment installer Graphics.UI.Gtk.Abstract.Widget et les événements en utilisant Cabal. N'a pas trouvé le nom du paquet là, pourriez-vous m'aider avec cela? En outre, cette partie du code continue sur Main, non? Merci – alitalvez
http://hackage.haskell.org/package/gtk-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:onKeyRelease? – leftaroundabout
Cela fonctionne. Je ne l'avais pas trouvé. –
Bien. Envisagez d'afficher votre solution en tant que réponse vous-même; Cela pourrait être très utile à d'autres personnes. – leftaroundabout