質問: ウインドウを常に前に、常にアクティブに、サイズコントロール可能で、親ウインドウから出ないようにしたいのですが・・・ bcb5で、photoshopの情報パレットのような マウス位置などの情報を表示するパレットを作成しています。 前回、「フォームに自作のプロパティを作ることは可能でしょうか?」という質問で 中身の動作については実装できたのですが、 またそれ以外に問題がでてきました。 1.パレットが、常にメインのウインドウよりも手前になければならない。 2.メインがアクティブになったり、パレットがアクティブになったりすると、 タイトルバーの色が変わって見た目にうるさいので、なんとかしたい。 photoshopでは、常に両方とも(タイトルバーが)アクティブの色になっているので、そのようにしたい。 3.パレットのサイズをユーザーが変更したときに、 パレットの中身のコンポーネントもその比率で拡大・縮小させたい。 4.ユーザーがパレットを移動させても、メインのウインドウから外にでないようにしたい。 メインウインドウの端まで来たら、そこで移動をストップさせたい。 以上です。 1に関しては、今現在、formstyleプロパティで「fsstayontop」に指定していますが 他に何か方法がありますでしょうか? 1~4の全てでも、一つずつでもかまいませんので、 よろしければ教えてください。 よろしくおねがいします。
回答: bcb5のフォームを使った実装方法は(可能かどうかを含めて)わかりませんが windowsapiでの実現方法なら 1. 常にウインドウを手前に表示したいのなら createwindowexやsetwindowlongにおいて ws_ex_topmostの属性をウインドウにつければ良いだけです。 2. winprocでwm_ncactivateのとき0を返せばアクティブな状態を失う事はありません。 3. 実装方法は色々あります。例えば ユーザーの変更があったときinvalidaterectでも実行してwm_paint内部で描画します。 4.マウスを動かすとwm_mousemoveが届くのでそのとき ウインドウの位置をgetwindowrectで取得し はみださないように制御すれば良いです。