メインコンテンツまでスキップ
バージョン: 20 R7 BETA

WP Get position

WP Get position ( targetObj {; layout} ) -> 戻り値

引数説明
targetObjObject4D Write Pro ドキュメント、レンジ または 要素
layoutInteger評価の際に使用される4D Write Pro ドキュメントのレイアウト: 0(デフォルト)=4D Write Pro レイアウト、 1=HTML WYSIWYG
戻り値Object位置情報

説明

WP Get position コマンドは、targetObj 引数で指定したターゲットのカレントの位置を説明するオブジェクトを返します。

targetObj 引数には、以下のものを渡すことができます:

  • レンジ
  • 要素(表 / 行 / 段落 / 本文 / ヘッダー / フッター / ピクチャー/セクション/サブセクション / テキストボックス)
  • 4D Write Pro ドキュメント

このコマンドは位置の情報を、以下のプロパティを持つオブジェクトとして返します:

プロパティ名詳細
section数値targetObj 引数と交錯する最初のセクションの番号
page数値targetObj 引数と交錯する最初のページの番号
column数値targetObj 引数と交錯する最初のカラムのインデックス(1-based)
line数値targetObj 引数と交錯する最初の行のインデックス(カラム(あるいはカラムがない場合にはページ)に対して相対的 - 1-based)
position数値targetObj 引数の最初の文字の、行の中での位置(1-based)
boundsオブジェクトtargetObj 引数の境界線の四角形の座標。page の左上端を起点として、カレントのドキュメント単位で相対的に表現されます。パディングとボーダーのサイズは(あれば)考慮に入れられます。マージンとルーラーは考慮に入れられません。
top数値四角形の上端の座標
left数値四角形の左端の座標
bottom数値四角形の下端の座標
right数値四角形の右端の座標
rangeHeight数値targetObj 引数の境界線の四角形の高さ。この値は、targetObj が複数のカラムにまたがっている場合には、bounds.bottom-bounds.top の値と異なる可能性があります(例題4参照)

targetObj 引数が空レンジの場合、WP Get position はレンジの開始位置情報を返します。デフォルト型(テキスト)の空のレンジであった場合、レンジの高さ(rangeHeight あるいは bounds.bottom-bounds.top) はカーソルの高さで、レンジの幅(bounds.right-bounds.left) は1ピクセルとなる点に注意して下さい。
targetObj 引数がヘッダーあるいはフッター内のテキストである場合、WP Get position はヘッダー/フッターが最初のセクション/ページ内にて表示されている位置情報を返します。
targetObj 引数が(複数のページに複製可能な)アンカーされた画像である場合、WP Get position は画像が最初のセクション/ページ内にてアンカーされている位置情報を返します。
targetObj 引数がサブセクションである場合、WP Get position は親セクションの最初のページの位置情報を返します。

任意のlayout 引数を使用すると、targetObj の評価にHTML wysiwyg ビューを設定することができます。"4D Write Pro"テーマ内にある、以下の定数のいづれか1つを渡すことができます:

定数コメント
wk 4D Write Pro layout倍長整数0標準の4D Write Proレイアウト。いくつかの特定のスタイル属性を含める事ができます。
wk html wysiwyg倍長整数1このレイアウトでは、4D Write Proの高度な属性のうち、全てのブラウザで互換性があるもの以外は除去されます。

layout 引数が省略された場合、デフォルトでは4D Write Pro レイアウトが使用されます。

パフォーマンスに関する注意

  • WP Get position では、WP PRINT コマンドと同じビュー設定が使用されます:
    • ヘッダー: 表示
    • フッター: 表示
    • 式: 計算されて表示
    • ページモード: ページあるいは下書き(HTML wysiwyg ビューはコマンドによって定義された通りです)
      targetObj が4D Write Pro フォームエリアに表示されている場合、必ずエリアのビュー設定とコマンドのビュー設定が同じ情報を返すように設定が一致しているようにしてください。また、これらの情報がエリア内で異なっていた場合、4D Write Pro はコマンドを呼び出すたびにレイアウトを計算するためにドキュメントを"クローン"しなければならず、そのため時間がかかる可能性があることに注意してください。パフォーマンス上の理由から、こういった場合にはドキュメントをオフラインでビルドし、ビルドが完成したあとにドキュメントをフォームオブジェクトにコピーすることが推奨されます。
  • このコマンドは、頻繁に生成されるようなイベント内(例えばOn After Edit など)内から呼び出されるべきではありません。何故なら例えばresult.rangeHeight などは、毎回イベントごとに時間のかかるレンダリング計算をする必要があるからです。

例題 1

レンジのページ番号を調べたい場合を考えます:

 var $range;$rangePosition : Object
 $range:=WP Text range(WParea) //ユーザーセレクションからレンジを取得
 $rangePosition:=WP Get position($range;wk 4D Write Pro layout)
 ALERT("First page number in selection is "+String($rangePosition.page))

例題 2

ドキュメントの最初のページと最後のページにおいて、テキストカラーを青に設定したい場合を考えます:

 var $nbPages : Integer
 var $body : Object
 var $_paragraphs : Collection
 
 $nbPages:=WP Get page count([DOC]Sample)
 $body:=WP Get body([DOC]Sample)
 $_paragraphs:=WP Get elements($body;wk type paragraph)
 For each($paragraph;$_paragraphs)
    $info:=WP Get position($paragraph)
    If($info.page=1)|($info.page=$nbPages) //最初のページと最後のページのテキストカラーは青に
       WP SET ATTRIBUTES($paragraph;wk text color;"blue")
    Else //他のページはテキストカラーは黒に
       WP SET ATTRIBUTES($paragraph;wk text color;"black")
    End if
 End for each

例題 3

ドキュメントをビルドする際、段落がページで分割されることを避けたい場合を考えます:

 var WParea;$body : Object
 var $_paragraphs : Collection
 WParea:=WP New
 
 $body:=WP Get body([DOC]Sample)
 $_paragraphs:=WP Get elements($body;wk type paragraph)
 
 For each($paragraph;$_paragraphs)
    $insert:=WP New($paragraph)
 
  //カレントのレンジとページ番号を記憶
    $rangeBefore:=WP Text range(WParea;wk end text;wk end text)
    $info:=WP Get position($rangeBefore)
    $memoPage:=$info.page
 
  //コンテンツを挿入、レンジには含めない
    WP INSERT DOCUMENT($rangeBefore;$insert;wk append;wk exclude from range)
 
  //挿入後の位置をチェック
    $rangeAfter:=WP Text range(WParea;wk end text;wk end text)
    $info:=WP Get position($rangeAfter)
 
    If($memoPage#$info.page) // ページが変化していた場合、改ページを追加
       WP INSERT BREAK($rangeBefore;wk page break;wk replace)
    End if
 
 End for each

例題 4

以下の例題では、targetObj 引数に応じて返される、境界線の四角形の座標について説明しています。

 $default:=WP Text range(WPArea) //デフォルト(テキスト)のレンジ
 $textCoordinates:=WP Get position($default) //赤の破線
 
 $paragraph:=WP Create paragraph range($default) //段落のレンジ
 $paraCoordinates:=WP Get position($paragraph) // 緑の破線

赤の破線: $textCoordinates オブジェクトの値 緑の破線: $ paraCoordinates オブジェクトの値

注: 複数のカラムを表示していた場合、rangeHeight プロパティ(太線)は、bounds.bottom-bounds.top プロパティ(破線)より大きくなる可能性があります:

参照

WP PRINT