メインコンテンツまでスキップ
バージョン: 開発中

CONVERT COORDINATES

CONVERT COORDINATES ( xCoord ; yCoord ; from ; to )

引数説明
xCoordInteger点の水平方向の座標(変換前)
点の水平方向の座標(変換後)
yCoordInteger点の垂直方向の座標(変換前)
点の垂直方向の座標(変換後)
fromInteger変換前の座標系
toInteger変換後の座標系

このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。

説明

CONVERT COORDINATESコマンドは、ある点の(x;y)座標を一つの座標系から別の座標系へと変換します。サポートされる入力・出力座標系はフォーム(およびサブフォーム)、ウィンド、そしてスクリーンです。例えば、このコマンドを使用して、メインフォーム内にある、サブフォームに属しているオブジェクトの座標を取得する事ができます。これにより、どんなカスタムオプションに対してもコンテキストメニューを作成する事が容易になります。

xCoordyCoord引数には、変換したい(x;y)座標を変数として渡します。コマンド実行後、これらの変数には返還後の値が渡されます。

from引数には、入力の点が使用している元の座標系を渡します。そしてto引数には、変換後の座標系を渡します。どちらの引数も、"Windows"テーマに追加された以下の定数値からどれか一つを使用する事ができます。

定数コメント
XY Current form倍長整数1原点はカレントフォームの左上端
XY Current window倍長整数2原点はカレントウィンドウの左上端
XY Main window倍長整数4Windows:原点はメインウィンドウの左上端 OS X:XY Screenと同じ
XY Screen倍長整数3原点はメインスクリーンの左上端(SCREEN COORDINATESコマンドと同じ)

このコマンドがサブフォームまたはサブフォームのオブジェクトから呼び出され、セレクターのどれか一つがXY Current formであった場合、座標系はサブフォーム自身に対して相対的であり、親フォームに対して相対的ではありません。

フォームウィンドウの位置を変換、または位置へ変換する場合(例えばGET WINDOW RECTの結果を変換する場合、またはOpen form windowに渡された値へ変換する場合)、この座標系はWindowsマシンのウィンドウコマンドで使用されているものであるため、XY Main windowを使用する必要があります。これはOS Xにおいてもこの目的で使用する事ができ、その場合はXY Screenと同等になります。

from 引数がXY Current formであり、点がリストフォームのボディセクション内にある場合、コマンドの実行コンテキストによって結果が変化します:

  • コマンドがOn Display Detailイベント内で呼び出されていた場合、出力点はスクリーン上で描画されているレコード内の表示内に位置します。
  • コマンドがOn Display Detailイベント内で、レコードが編集中に呼び出されていた場合、出力点は編集中のレコード内の表示内に位置します。
  • それ以外の場合には、出力点は銭湯レコードの表示内に位置します。

例題 1

"MyObject"というオブジェクト内の左下端にポップアップメニューを開きたい場合を考えます。

  // OBJECT GET COORDINATES はカレントフォーム座標系に対して働きます
  // ダイナミックポップアップメニューはカレントウィンドウ座標系を使用します
  // そのためこの値を変換する必要があります
 var $left;$top;$right;$bottom : Integer
 var $menu : Text
 OBJECT GET COORDINATES(*;"MyObject";$left;$top;$right;$bottom)
 CONVERT COORDINATES($left;$bottom;XY Current form;XY Current window)
 $menu:=Create menu
 APPEND MENU ITEM($menu;"Right here")
 APPEND MENU ITEM($menu;"Right now")
 Dynamic pop up menu($menu;"";$left;$bottom)
 RELEASE MENU($menu)

例題 2

マウスカーソルの位置にポップアップウィンドウを開きたい場合を考えます。Windowsにおいては、MOUSE POSITIONコマンド(* 引数を使用)はMDIウィンドウの位置に基づいた値を返すため、座標系を変換する必要があります:

 var $mouseX;$mouseY;$mouseButtons : Integer
 var $window : Integer
 MOUSE POSITION($mouseX;$mouseY;$mouseButtons)
 CONVERT COORDINATES($mouseX;$mouseY;XY Current window;XY Main window)
 $window:=Open form window("PopupWindowForm";Pop up form window;$mouseX;$mouseY)
 DIALOG("PopupWindowForm")
 CLOSE WINDOW($window)

参照

GET WINDOW RECT
OBJECT GET COORDINATES
OBJECT SET COORDINATES
SET WINDOW RECT