4D v15OBJECT GET COORDINATES |
||||||||||||||
|
4D v15
OBJECT GET COORDINATES
|
OBJECT GET COORDINATES ( {* ;} object ; left ; top ; right ; bottom ) |
||
4D v14 R5から導入
テーマ: オブジェクト(フォーム)
OBJECT GET COORDINATES コマンドは特定の親のリストボックスオブジェクトだけではなく、リストボックスのパーツ(カラム、ヘッダーまたはフッター)の座標を返す事ができるようになりました。
以前のリリースでは、このコマンドは適用されたリストボックスのパーツに関わらず、常に親のリストボックスの座標を返していましたが、現在ではobject 引数で参照しているオブジェクトがリストボックスヘッダー、カラム、またはフッターサブオブジェクトの場合、返される座標は指定されたそれらのサブオブジェクトのものとなります。
この新機能を使用して、例えばリストボックスのヘッダーにマウスオーバーしたときにそこに小さなアイコンを表示させ、ユーザーがそれをクリックするとコンテキストメニューが表示される、といったようなこともできるようになります。
互換性に関する注意: 既存のアプリケーションにおいてこのコマンドをリストボックスヘッダー、フッター、またはカラムに対して使用している場合、4D v14 R5以降のバージョンに変換した際には返される座標が異なります。リストボックス全体の座標を取得したい場合には、コードを修正してコマンドがサブオブ ジェクトに対してではなく、リストボックスオブジェクト自身に対して呼び出されているようにしなければなりません。
統一性のために、対象の オブジェクトがリストボックスサブオブジェクトであってもリストボックスオブジェクトであっても、使用される参照フレームは同じとなっています。原点はそ のオブジェクトを含むフォームの左上端となっています。リストボックスサブオブジェクトに対しては、返される値は理論値となり、クリッピングが起きない限 りリストボックスのスクロールの状態を考慮に入れます。結果として、サブオブジェクトはその座標において(一部または全部が)見えないこともあり、これら の座標がフォームの端より外側にあることもありえます(または、負の値を返す事も有り得ます)。サブオブジェクト(の一部または全部が)見えているかどう かを調べるためには、リストボックスの座標と比較する必要があります。その際、以下のルールが適用されます:
具体例として、以下の画像において、Capital のカラムに注目して下さい(このカラムを囲っている赤い四角がこのカラムの座標を表しています):
1枚目の画像にあるように、カラムはリストボックスより大きいので、カラムの座標はリストボックス(とフッター)の下限より下まで広がっています。2枚目の画像では、リストボックスはスクロールされており、その結果このカラムはLanguage カラムとヘッダーエリアの"下"へと移動します。どちらの場合においても、実際に表示されている部分(緑のエリア)を計算するためには、赤いエリアを計算に入れる必要があります。
インターフェースのために、クリックされたエリアを赤い四角で囲いたい場合を考えます:
リストボックスのオブジェクトメソッドにおいて、以下の様に記述します:
OBJECT SET VISIBLE(*;"rectangleInfo";False) //赤い四角を初期化
$ptr:=OBJECT Get pointer(Object current)
OBJECT GET COORDINATES($ptr->;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$lbx1;$lby1;$lbx2;$lby2)
If($lby1>$y1)|($lby2<$y2) // クリックされたエリアがリストボックスの外側にある場合、
OBJECT SET VISIBLE(*;"Alert";True) //警告を表示します
Else
OBJECT SET VISIBLE(*;"Alert";False)
End if
メソッドは座標の理論値を返します。リストボックスがリサイズされた場合、どの部分が表示されているのかを調べるためにクリッピングを再計算が必要になる場合もあります:
プロダクト: 4D
テーマ: ランゲージ
4D v15 - アップグレードリファレンス(標準版) ( 4D v15)