Q144:テーブル上の任意の位置をクリックするとマウスカーソルの近くに新たにフレームを表示させる方法。
Q144-1:
以下のような機能を実装しようと思っています。
・テーブル上の任意の位置をクリックするとマウスカーソルの近くに新たにフレームを表示する
不明なのは「マウスカーソル付近にフレームを表示」の部分です。
マウスカーソルの画面上絶対座標が取得できればと思いましたが、私の調べた限りですとコンポーネントからの相対座標しか取得できず、かつ、フレームの表示位置を設定する座標は絶対座標での指定になるようですのでうまく実装することができませんでした。
マウスカーソルの絶対座標を取得する方法はありますでしょうか?
出来ない場合、画面上の指定の位置にフレームを表示できるような方法があれば教えていただけますか?
A144-1:
現状では直接マウスカーソルの絶対座標を取得する機能は提供しておりませんが、現在お考えの機能の場合には同様のことを実現できます。サンプルのアプリケーションを掲載しますので、下記の説明と一緒にご覧ください。
テーブルのセル等の上でマウスクリックをしますと、マウスボタンイベントが発生します。このマウスボタンイベントは、テーブルの左上隅に対する相対的なX座標とY座標を含んでいます。
一方、テーブルコンポーネントにはgetLocationOnScreen()というメソッドがあり、画面上での左上隅の絶対座標をPointオブジェクトとして取得することができます。このPointの位置をテーブル上での相対的なX座標とY座標分だけ平行移動すればマウスカーソルの絶対座標となります。
残念ながら、現在はこのようなPointの操作をわかりやすく提供するコンポーネントがないため、関連ファイルのサンプルではオブジェクトバッファというコンポーネントを用いて裏技的に実現しています。この点は今後の改善点として検討させていただきます。
最後に、上記のPointオブジェクトを用いてフレームのsetFrameLocation(Point)メソッドを呼び出すと、表示させたい位置が設定されますので、表示メソッドを呼び出します。
関連ファイル:sample.mzax
※ Ver.2.7より位置格納変数コンポーネントが追加され、Pointの操作が容易となりました。