Print object
Print object ( {* ;} object {; posX {; posY {; width {; height}}}} ) -> 戻り値
引数 | 型 | 説明 | |
---|---|---|---|
* | 演算子 | → | 指定時objectはオブジェクト名 (文字列) 省略時 objectは変数 |
object | any | → | オブジェクト名 (* 指定時) または 変数 (* 省略時) |
posX | Integer | → | オブジェクトの横位置 |
posY | Integer | → | オブジェクトの縦位置 |
width | Integer | → | オブジェクトの幅 (ピクセル) |
height | Integer | → | オブジェクトの高さ (ピクセル) |
戻り値 | Boolean | ← | True = オブジェクトが完全に印刷された; そうでなければFalse |
このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。
説明
Print object コマンドを使用して objectと*** 引数で指定したフォームオブジェクトを、posXとposYの位置に、任意のサイズで印刷できます。
Print object コマンドを呼び出す前に、印刷するテーブルまたはオブジェクトを含むプロジェクトフォームを新しい FORM LOAD で指定しなければなりません。
オプションの*** 引数を渡すと、object引数にはオブジェクト名 (文字列) を渡します。* 引数を渡さない場合、objectには変数を指定します。この場合、文字列ではなく変数参照 (オブジェクトタイプのみ) を渡します。
posXとposY引数はオブジェクトを印刷する開始位置を指定します。これらの値はピクセル単位で指定ます。これらの引数を省略すると、オブジェクトはフォーム上の位置に基づいて印刷されます。
widthとheight引数はフォームオブジェクトの幅と高さを指定します。Print object コマンドは可変長のオブジェクトを管理しません。OBJECT GET BEST SIZE コマンドでオブジェクトのサイズを管理しなければなりません。またOBJECT GET BEST SIZE コマンドでテキストを含むオブジェクトのもっとも適切なサイズを知ることができます。同様に、Print object はページブレークを自動では生成しません。必要に応じて開発者が管理しなければなりません。
4Dコマンドを使用してオブジェクトプロパティ (色やサイズなど) をオンザフライで変更できます。
オブジェクトが完全に印刷されるとコマンドはTrueを返します。そうでないばあい、言い換えればフレームワーク内のオブジェクトに割り当てられた データをすべて印刷できなかった場合、コマンドはFalseを 返します。特にリストボックスのすべての行を印刷できなかった場合、コマンドはFalseを 返します。この場合Print object コマンドを、それがTrueを返すまで繰り返し呼び出します。特別なメカニズムが自動で使用され、オブジェクトの内容が呼び出しごとに自動でスクロールされます。ユーザーが印刷オペレーションをキャンセルした場合、エラー-128 が生成されます。このエラーはON ERR CALL で割り込み可能です。
注:
- 4D の現在のバージョンでは、リストボックスタイプのオブジェクトのみがこのメカニズムを持っています (他のオブジェクトではコマンドは常に Trueを返します)。4Dの将来のバージョンでこの機能は他の可変長オブジェクトに拡張されます。
- LISTBOX GET PRINT INFORMATION コマンドを使用して、処理中に印刷状況を知ることができます。
Print object コマンドは事前にOPEN PRINTING JOB で開かれた印刷ジョブのコンテキストでのみ使用できます。このコンテキストの外で呼び出された場合、コマンドはなにも行いません。同じ印刷ジョブ内でPrint object コマンドを複数回呼び出すことができます。
**注: 階層リスト、サブフォーム、およびWebエリアを印刷することはできません。
例題 1
フォーム上の10個のオブジェクトを印刷する例:
PRINT SETTINGS
If(OK=1)
OPEN PRINTING JOB
If(OK=1)
FORM LOAD("PrintForm")
x:=100
y:=50
GET PRINTABLE AREA(hpaper;wpaper)
For($i;1;10)
OBJECT GET BEST SIZE(*;"Obj"+String($i);bestwidth;bestheight)
$end:=Print object(*;"Obj"+String($i))
y:=y+bestheight+15
If(y>hpaper)
PAGE BREAK(>)
y:=50
End if
End for
End if
CLOSE PRINTING JOB
End if
例題 2
リストボックス全体を印刷したい場合を考えます:
OPEN PRINTING JOB
FORM LOAD("myForm")
$Over:=False
gError:=0
ON ERR CALL("err")
Repeat
$Total:=Print object(*;"List_Box")
LISTBOX GET PRINT INFORMATION(*;"List_Box";lk printing is over;$Over)
PAGE BREAK
If(gError=-128) //ユーザーが印刷をキャンセルした
$Over:=True
End if
Until($Over)
CLOSE PRINTING JOB
ON ERR CALL("")