4D v14.3

SET PRINT MARKER

ホーム

 
4D v14.3
SET PRINT MARKER

SET PRINT MARKER 


 

SET PRINT MARKER ( markNum ; position {; *} ) 
引数   説明
markNum  倍長整数 in マーカ番号
position  倍長整数 in マーカの新しい位置
演算子 in 指定時 = 後続のマーカを移動する 省略時 = 後続のマーカを移動しない

説明   

SET PRINT MARKER コマンドを使用し、印刷時にマーカ位置を指定することができます。このコマンドをGet print markerOBJECT MOVEPrint formコマンドと組み合わせて使用することにより、印刷エリアのサイズを調節することができます。

SET PRINT MARKERは次の2つの状況において使用可能です:

  • PRINT SELECTIONおよびPRINT RECORDコマンドのコンテキストでのOn headerフォームイベント中。
  • Print formコマンドのコンテキストでのOn Printing Detailフォームイベント中。この処理はカスタマイズされたレポートの印刷を容易にします (例を参照)。

コマンドの有効範囲は印刷に限定され、画面上には変更が表示されません。フォームに対して行った変更は保存されません。

markNum引数には、テーマ内の定数のいずれかを渡します:

定数
Form break0 倍長整数 300
Form break1 倍長整数 301
Form break2 倍長整数 302
Form break3 倍長整数 303
Form break4 倍長整数 304
Form break5 倍長整数 305
Form break6 倍長整数 306
Form break7 倍長整数 307
Form break8 倍長整数 308
Form break9 倍長整数 309
Form detail 倍長整数 0
Form footer 倍長整数 100
Form header 倍長整数 200
Form header1 倍長整数 201
Form header10 倍長整数 210
Form header2 倍長整数 202
Form header3 倍長整数 203
Form header4 倍長整数 204
Form header5 倍長整数 205
Form header6 倍長整数 206
Form header7 倍長整数 207
Form header8 倍長整数 208
Form header9 倍長整数 209

positionには、新しい位置をピクセル単位で渡します。

オプション引数 * を渡すと、このコマンドの実行時に、markNumで指定したマーカより下側に位置するすべてのマーカが、指定したマーカと同じピクセル数だけ、同じ方向へ移動します。

警告: このマーカより下側にあるエリア内のオブジェクトもすべて移動します。
引数 * を使用すると、後続の各マーカの最初の位置より下側にmarkNumで指定したマーカを配置することができます。これら後続のマーカも同時に移動します。

Notes:

  • このコマンドで変更できるのは、既存のマーカ位置だけです。マーカを追加することはできません。フォームに存在しないマーカを指定した場合、コマンドは何も行いません。
  • デザインモードにおける印刷用マーカの仕組みは変わりません。つまり、あるマーカは、それより上にあるマーカを飛び越えて移動したり、後続のマーカよりも下側に移動することはできません(引数 * を使用しない場合)。

例題  

この例は、3つのカラムがあるレポートを作成します。各行の高さは、フィールド内容に応じて実行中に計算されます。
印刷に使用する出力フォームは次の通りです:

このフォームに対してOn Printing Detailフォームイベントが選択されています(印刷されるエリアに関係なく、Print form コマンドはこのタイプのフォームイベントだけを生成する点に留意してください)。
レコードごとに、(多くの内容を保持する) “Actors”または“Summary”カラムの内容に応じて行の高さを調整しなくてはなりません。目的とする結果を次に示します:

印刷用のプロジェクトメソッドは次の通りです:

 C_LONGINT(vLprint_height;$vLheight;vLprinted_height)
 C_STRING(31;vSprint_area)
 PAGE SETUP([Film];"Print_List3")
 GET PRINTABLE AREA(vLprint_height)
 vLprinted_height:=0
 ALL RECORDS([Film])
 
 vSprint_area:="Header" `ヘッダエリアの印刷
 $vLheight:=Print form([Film];"Print_List3";Form header)
 $vLheight:=21 `固定高
 vLprinted_height:=vLprinted_height+$vLheight
 
 While(Not(End selection([Film])))
    vSprint_area:="Detail" `詳細エリアの印刷
    $vLheight:=Print form([Film];"Print_List3";Form detail)
  `詳細の計算はフォームメソッドで実行
    vLprinted_height:=vLprinted_height+$vLheight
    If(OK=0) `CANCEL がフォームメソッドで実行された
       PAGE BREAK
       vLprinted_height:=0
       vSprint_area:="Header" `ヘッダエリアの再印刷
       $vLheight:=Print form([Film];"Print_List3";Form header)
       $vLheight:=21
       vLprinted_height:=vLprinted_height+$vLheight
       vSprint_area:="Detail"
       $vLheight:=Print form([Film];"Print_List3";Form detail)
       vLprinted_height:=vLprinted_height+$vLheight
    End if
    NEXT RECORD([Film])
 End while
 PAGE BREAK `最後のページの印刷

Print_List3のフォームメソッド:

 C_LONGINT($l;$t;$r;$b;$fixed_wdth;$exact_hght;$l1;$t1;$r1;$b1)
 C_LONGINT($final_pos;$i)
 C_LONGINT($detail_pos;$header_pos;$hght_to_print;$hght_remaining)
 
 Case of
    :(vSprint_area="Detail") `詳細印刷実行中
       OBJECT GET COORDINATES([Film]Actors;$l;$t;$r;$b)
       $fixed_wdth:=$r-$l  ` Actors テキストフィールドサイズの計算
       $exact_hght:=$b-$t
       OBJECT GET BEST SIZE([Film]Actors;$wdth;$hght;$fixed_wdth)
  `内容に基づく最適なフィールドのサイズ
       $movement:=$hght-$exact_hght
 
       OBJECT GET COORDINATES([Film]Summary;$l1;$t1;$r1;$b1)
       $fixed_wdth1:=$r1-$l1  `Summaryテキストフィールドサイズの計算
       $exact_hght1:=$b1-$t1
       OBJECT GET BEST SIZE([Film]Summary;$wdth1;$hght1;$fixed_wdth1)
  `内容に基づく最適なフィールドのサイズ
       $movement1:=$hght1-$exact_hght1
       If($movement1>$movement)
  `最も高いフィールドの取得
          $movement:=$movement1
       End if
 
       If($movement>0)
          $position:=Get print marker(Form detail)
          $final_pos:=$position+$movement
  `詳細マーカとそれより下のオブジェクトを移動
          SET PRINT MARKER(Form detail;$final_pos;*)
  `テキストエリアのサイズ変更
          OBJECT MOVE([Film]Actors;$l;$t;$r;$hght+$t;*)
          OBJECT MOVE([Film]Summary;$l1;$t1;$r1;$hght1+$t1;*)
 
  `分離線のリサイズ
          OBJECT GET COORDINATES(*;"H1Line";$l;$t;$r;$b)
          OBJECT MOVE(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*)
          For($i;1;4;1)
             OBJECT GET COORDINATES(*;"VLine"+String($i);$l;$t;$r;$b)
             OBJECT MOVE(*;"VLine"+String($i);$l;$t;$r;$final_pos;*)
          End for
       End if
 
  `利用可能なスペースの計算
       $detail_pos:=Get print marker(Form detail)
       $header_pos:=Get print marker(Form header)
       $hght_to_print:=$detail_pos-$header_pos
       $hght_remaining:=vLprint_height-vLprinted_height
       If($hght_remaining<$hght_to_print`Insufficient height
          CANCEL `次のページに移動
       End if
 End case

 
プロパティ 

プロダクト: 4D
テーマ: 印刷
番号: 709

 
履歴 

変更: 4D 2003

 
参照 

Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v12.4)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)

Inherited from : SET PRINT MARKER ( 4D v11 SQL Release 6)