« とりあえずそれなりに | メイン | SSL証明書の更新 »

2005年03月01日

mixi Alert 開発日誌:: TTrayIconのダブルクリック

    

C++Builder 6 のTTrayIconを使ってダブルクリックの処理を行いたいと思った。
昔読んだ記憶によるとタスクトレイアイコンのダブルクリックは面倒だったような・・・と思い、"Visual C++ 5パワフルテクニック大全集"を出してきて読むと、タイマーを作ってダブルクリックを判定している。
やっぱり面倒だなぁと思って、いろいろと考えていてふと気づいた。
TTrayIconのRestoreOnプロパティがデフォルトではimDoubleClickになっていて、実際にダブルクリックするとOnRestoreがコールされていたのを思い出した。
だが、イベントを見てもOnDblClickなるものはない。
そこで、grepでソースを探したら、Examples/Controls/Sourceの中に有ったので見てみると、FOnDblClickがプライベートメンバで、プロパティにはない。って、ない!
なぜだ?
ダブルクリックのメッセージが来た時にはキチンDoDblClick()をコールしていて、その中ではFOnDblClickをコールしている。しかし、FOnDblClickにイベントを設定する場所はない。
なんだこれは?
仕方ないので、ソースに変更を加えて、コンポーネントをインストールしようとしたが、重複する名前があるとかで失敗。
あらら。
さてどうしたものか。
サブクラス化を使うか?
HWNDは取得できるし、GetWindowLongを使えば、ウィンドウプロシージャも得られる。
これでいけるかと思ったが、C++Builderのウィンドウプロシージャのプロトタイプが違うのが気がかりだ。しかも、クラスのメソッドを普通に渡せる。
何らかのトリックがあるのだと思うが、どのようになっているのかわからないので不安だ。
C++Builder用のフックする仕組みが用意されていればいいんだけど・・・
でも、TTrayIconを基に独自にコンポーネントを作るのが無難かなぁ。
うーん。
もう少し調べて考えよう。



投稿者 Takenori : 2005年03月01日 06:16




comments powered by Disqus
Total : Today : Yesterday : なかのひと