« 一つずつ片付ける | メイン | 続・タクスバーからアイコンを消す »

2005年12月01日

mixi Alert 開発日誌:: タクスバーからアイコンを消す

    

Formを表示した時のwindowsタクスバーの表示
アクティブなウィンドウだけをタスクバーに表示
タスクバーに表示されないようにする
実行時にタスクバーアイコンの表示・非表示を切り替える方法
これらのリンクを参考にやってみるも、どうもうまくいかない。
振る舞いがおかしくなったり、Tool Windowの見た目が変わったり。
Main Formを常に非表示にしているのが関係あるのか?
タスクバーへアイコンが表示された後、1回消すとなぜか表示されなくなし。

で、一瞬だけMain Formを表示した後、非表示にするようにしてみたが、特に効果なし。
次に何らかのWindowが表示された時にはやはりタスクバーへアイコンが表示される。

Application 変数3.2.3 アプリケーションウィンドウのメッセージ処理3.2.4 アプリケーションウィンドウの問題点が関係ありそうだ。

そもそもの問題は、Formを表示した時にタクスバーにアイコンが表示され、そのアイコンをクリックするとFormが消えてしまうのだが、FormのVisibleプロパティはtrueのままなこと。
そこで、GetWindowPlacementを使い最初化状態かどうかを調べて、最初か状態ならリストアするようにしたのだが、状態はSW_SHOWNORMALになっている。
それではとTApplicationEvents コンポーネントを使い、OnMinimizeへメソッドを設定、設定したメソッド内ですべてのFormをHideにした。
これで、Visibleプロパティはfalseになったのだが…… タスクバーのアイコンのメニューが変。
なぜか元に戻すが有効になっている。
Formは表示されているのだが……
そういえば、OnMinimizeでHideを呼んでいると、次にFormを表示した時にはタスクバーのアイコンが復活する。
呼ばなかった場合は、タスクバーのアイコンは消えたままだ。
なんだろう?
変だ。

タスクバーのアイコンは謎だが、GetWindowPlacementでSW_SHOWNORMALが返ってきたのは、調べた対象がFormだからではないか?
そこで、GetWindow( Handle, GW_OWNER )を使用してオーナーウィンドウ、つまりVCLのアプリケーションウィンドウを取得し、そのウィンドウハンドルをGetWindowPlacementで調べるとSW_SHOWMINIMIZEDが返ってきた。
ならば、ShowWindow( hOwner, SW_MINIMIZE )で最初に最小化しておけばと思ったが、やってみると初めからタスクトレイにアイコンが表示されることになっただけ。

オーナーウィンドが最小化状態でかつFormのVisibleがtrueの時はリストアを呼ぶようすれば…… と思ってやってみたが、Formを閉じてもタスクトレイにアイコンが残るようになった。

OnMinimizeでHideを呼ぶのでいいかな。
タスクバーのアイコンのメニューが少し変だけど。
それにしてもいろいろと不可解だ。
どうなっているのだろう?
もう一度整理して考えた方がいいかもしれないな。



投稿者 Takenori : 2005年12月01日 01:36




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