[ruby-list:41844] Re: ruby/tkでウィンドウにフォーカスがないときにもイベントを捕捉する方法

From: Hidetoshi NAGAI <nagai@...>
Date: 2006-02-22 13:48:20 UTC
List: ruby-list #41844
永井@知能.九工大です.

From: <kot-hara@secom.co.jp>
Subject: [ruby-list:41843] Re: ruby/tkでウィンドウにフォーカスがないときにもイベントを捕捉する方法
Date: Wed, 22 Feb 2006 21:13:58 +0900
Message-ID: <EDFFF3AE7AC2FC4292A73EE62E2761B7180A94CC@EXVS01.SECOM.corp>
> ・・・と思ったのですが、ウィンドウを常に最前面に表示させることができませんでした。grabとかfocusとかいろいろとやってみたのですが。。。
> Tk.messageBox みたいに常に最前面に表示かつ他のアプリケーションも実行できる、というようなのが実現できるといいのですがなにぶん力量不足で。。。

ウィンドウマネージャの管理下にある場合なら,
--------------------------------------------------------
  top.bind('Visibility'){top.raise}
  top.bind('Expose'){top.raise}
--------------------------------------------------------
という手が使えると思うのですが,overrideredirect を true にすると
これらのイベントが来なくなるようですね.
ですので,タイマーを使って強制的に raise してやるのが
妥当な方法ではないかと思います.
つまり,
--------------------------------------------------------
  TkTimer.new(50, -1, proc{top.raise}).start
--------------------------------------------------------
などとしてタイマー処理を動かしておく (-1 で無限回の繰り返しを指定) 
という方法です.
この例では 50 ms ごとに強制 raise をしてますが,
このインターバルは適当に調整してください.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread