私はgtk2hsとhaskellを使用しています。haskellでkeydownイベントとkeyupイベントを取得するにはどうすればよいですか?
keydown/keyupイベントを取得する方法はありますか(keystateも同様ですが、keypressイベントはそうではありません)。
私はgtk2hsとhaskellを使用しています。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
リリースは、キーがリリースされたり押されたかどうかを含んでいるため、同じハンドラは、両方のイベントのために働くことができます:ここで
は、キーの状態を追跡することができる方法です。
私はKeyDownイベントを取得
(イベント間のウィンドウを切り替えたとき、それはしかし、まだ可能です)別のウィジェットに登録KeyPressイベントとkeyReleaseを避けるために、ウィンドウのキーイベントではなく、いくつかのウィジェットに、このコードの応答を作りましたイベントは、最後のkeyPressからkeyReleaseがあったかどうかを追跡することによって行うことができます。
こんにちは、あなたのソリューションを使用してキーイベントを取得しようとしていますが、Cabalを使用してGraphics.UI.Gtk.Abstract.WidgetとEventsをインストールする方法がわかりません。パッケージ名が見つかりませんでした。それを手伝ってもらえますか?また、コードのこの部分はメインになります。ありがとう – alitalvez
http://hackage.haskell.org/package/gtk-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:onKeyRelease? – leftaroundabout
それは動作します。見つけられなかった。 –
良い自分自身で答えを投稿することを検討してください。これは他の人にとっては非常に便利なことです。 – leftaroundabout