4D v15

OBJECT GET COORDINATES

ホーム

 
4D v15
OBJECT GET COORDINATES

OBJECT GET COORDINATES  


 

 

OBJECT GET COORDINATES ( {* ;} object ; left ; top ; right ; bottom )

説明  

4D v14 R5から導入

テーマ: オブジェクト(フォーム)

OBJECT GET COORDINATES コマンドは特定の親のリストボックスオブジェクトだけではなく、リストボックスのパーツ(カラム、ヘッダーまたはフッター)の座標を返す事ができるようになりました。

以前のリリースでは、このコマンドは適用されたリストボックスのパーツに関わらず、常に親のリストボックスの座標を返していましたが、現在ではobject 引数で参照しているオブジェクトがリストボックスヘッダー、カラム、またはフッターサブオブジェクトの場合、返される座標は指定されたそれらのサブオブジェクトのものとなります。

この新機能を使用して、例えばリストボックスのヘッダーにマウスオーバーしたときにそこに小さなアイコンを表示させ、ユーザーがそれをクリックするとコンテキストメニューが表示される、といったようなこともできるようになります。

互換性に関する注意: 既存のアプリケーションにおいてこのコマンドをリストボックスヘッダー、フッター、またはカラムに対して使用している場合、4D v14 R5以降のバージョンに変換した際には返される座標が異なります。リストボックス全体の座標を取得したい場合には、コードを修正してコマンドがサブオブ ジェクトに対してではなく、リストボックスオブジェクト自身に対して呼び出されているようにしなければなりません。

統一性のために、対象の オブジェクトがリストボックスサブオブジェクトであってもリストボックスオブジェクトであっても、使用される参照フレームは同じとなっています。原点はそ のオブジェクトを含むフォームの左上端となっています。リストボックスサブオブジェクトに対しては、返される値は理論値となり、クリッピングが起きない限 りリストボックスのスクロールの状態を考慮に入れます。結果として、サブオブジェクトはその座標において(一部または全部が)見えないこともあり、これら の座標がフォームの端より外側にあることもありえます(または、負の値を返す事も有り得ます)。サブオブジェクト(の一部または全部が)見えているかどう かを調べるためには、リストボックスの座標と比較する必要があります。その際、以下のルールが適用されます:

  • 全てのサブオブジェクトは親のリストボックスの座標(OBJECT GET COORDINATES がリストボックスに対して返す値)に沿って切り取られます。
  • ヘッダーとフッターのサブオブジェクトはカラムの中身の上に表示されます。カラムの座標とヘッダーまたはフッターの座標が交錯した場合、その重なった部分においてはカラムは表示されません。
  • ロックされたカラムの要素はスクロール可能なカラムの要素の上に表示されます。スクロール可能なカラムの要素がロックされたカラムの座標と交錯した場合、スクロール可能なカラムの要素はこの重なった部分では表示されません。

具体例として、以下の画像において、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
テーマ: ランゲージ

 
履歴 

 
ARTICLE USAGE

4D v15 - アップグレードリファレンス(標準版) ( 4D v15)