Thread Rating:
  • 325 Vote(s) - 2.72 Average
  • 1
  • 2
  • 3
  • 4
  • 5
キー押下イベントを無視するには?
05-21-2014, 12:42 PM,
#2
RE: キー押下イベントを無視するには?
とりあえず、画面のロック前後で、FocusManager のキーアクセルを、引きはがし&再設定して、
キープレスイベントを空振りさせることはできそうです。

もっと良い方法はないものですかね・・・。

Code:
||画面をロックするためにバリアを張るフレーム
{define-class public BarrierFrame {inherits OverlayBox}
  {constructor public {default ...}
    {construct-super {splice ...}}
  }

  field barrier-screen-frame:Graphic =
      {Fill background =  "transparent"}

  field private _barrier?:bool = false
  {getter public {barrier?}:bool
    {return self._barrier?}
  }
  {setter public {barrier? val:bool}:void
    set self._barrier? = val
    {if self._barrier?  then
        {self.add self.barrier-screen-frame}
    else
        {dispatch-events false}
        {self.barrier-screen-frame.detach}
    }
  }

}

{def bf = {BarrierFrame}}

{def td = {TextField}}

||FocusManager に設定するアクセルキーを管理する配列変数
{def ary-key-accels = {{Array-of KeyAccel}}}

{def lock-cb =
    {CommandButton
        label = "画面のロック",
        {on Action at cb:CommandButton do
            set td.value = "ロック中"

            def fm =  {cb.get-focus-manager}

            ||ロック中のキー押下イベントが流れてしまわないように、
            ||フォーカスマネージャからキーアクセルを引きはがす
            {dispatch-events false}
            {for e in ary-key-accels do
                {fm.remove-key-accel e}
            }
            {dispatch-events false}

            set bf.barrier? = true

            {read-from {url "http://www.yahoo.com"}}

            set bf.barrier? = false
            set  td.value = ""

            ||フォーカスマネージャのキーアクセルをもとに戻す
            {dispatch-events false}
            {for e in ary-key-accels do
                {fm.add-key-accel e}
            }
            {dispatch-events false}

            set td.value = ""
        }
    }
}

{def fnc-cb =
    {CommandButton
        label = "メッセージ表示(F1)",
        {on Action do


            {popup-message "hello world"}
        } ,
        ||画面表示時にFocusManager に、アクセルキーを設定
        {on AttachEvent at button:CommandButton do

            def fm =  {button.get-focus-manager}
            set fm.standard-accelerators? = false
            def key-accel-string = "F1"
            def key-accel = {KeyAccel key-accel-string = key-accel-string,
                                {on Action do
                                    {button.take-action}
                                }
                            }
            {fm.add-key-accel key-accel}

            ||アクセルキーを管理配列に追加
            {ary-key-accels.append key-accel}
        }
    }
}

{do
    {bf.add {VBox  td, lock-cb,  fnc-cb  }  }
    def d:Dialog = {Dialog bf}
    {d.show}
}



Messages In This Thread
RE: キー押下イベントを無視するには? - by umemura - 05-21-2014, 12:42 PM
Forum Jump:


Users browsing this thread:
2 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1085')