掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マウスが乗っているオブジェクトに独自(?)の枠を表示するには? (ID:27923)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> マウスが乗っているオブジェクトに枠を表示するには オブジェクトではなくウィンドウになりますが。 クリアすべきことが幾つかあり、どこまでは見当がついていてどこから検討がつかないのか分かりませんので、とりあえず流れだけ。 (1) Mouse.CursorPosで得られるマウス座標の下のウインドウハンドルをWindowFromPoint()APIで取得する。 (2) GetWindowRect()APIでそのウィンドウの位置とサイズ(Rext値)を得る。 (3) スクリーン用キャンバス(TCanvas)をCreateし、そのキャンバスハンドルにGetWindowDC(0)APIで得たスクリーンキャンバスのハンドルを渡す。 (4) スクリーン用キャンバスに先に得たRect値で矩形を描画する。 以上で、スクリーンへの描画ができます。 マウスが他のウィンドウに移動した場合、及びこの作業(マウス下のウィンドウを視覚的に確認できるよう矩形で囲む)が不要になった場合にはこの矩形を消去し元に戻さねばなりません。 TPen.Mode := pmNot で2度描画して消すのが一般的ですが、ウィンドウに矩形を描画した場合には、隣接するウィンドウにマウスが移った場合にうまく消えない場合もあります。 事例のソフトは pmNot を使用していないようです。 この場合の定石は目にしたことがありません。 工夫のしがいがあるところです。 事例として紹介されていたソフトは、ドラッグ中だけこの作業を継続し、MouseUpでこの作業を終了させています。 しかし、マウスをまったくクリックすることなく、単にスクリーン上を移動させるだけで矩形を描きたいのなら、描いた矩形の消去にはもう一工夫が必要になります。(最小化・最大化・閉じるなどのシステムメニュを実行してしまった場合など) 事例のソフトは、MouseUpでこの作業を終了させますが、もし同様の仕様にしたいのなら、アプリが非アクティブの場合にも、マウスがスクリーン上のどこにあってもマウスボタンが離されたことを補足しなければなりません。 スクリーンへの描画方法はそうたくさんあるわけではありませんが、具体的にやりたいこと・仕様を確定しないと検討範囲が絞れません。又、スクリーン用キャンバスCreateのタイミングなども変わってきます。 どういう契機で描画・消去・終了させるかを決めて示してもらわないと、これ以上具体的なアプローチは難しいかと。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.