| 4D v15.4SET PRINT MARKER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v15.4
 SET PRINT MARKER 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SET PRINT MARKER ( markNum ; position {; *} ) | ||||||||
| 引数 | 型 | 説明 | ||||||
| markNum | 倍長整数 |   | マーカ番号 | |||||
| position | 倍長整数 |   | マーカの新しい位置 | |||||
| * | 演算子 |   | 指定時 = 後続のマーカを移動する 省略時 = 後続のマーカを移動しない | |||||
SET PRINT MARKER コマンドを使用し、印刷時にマーカ位置を指定することができます。このコマンドをGet print marker、OBJECT MOVE、Print formコマンドと組み合わせて使用することにより、印刷エリアのサイズを調節することができます。
SET PRINT MARKERは次の2つの状況において使用可能です:
コマンドの有効範囲は印刷に限定され、画面上には変更が表示されません。フォームに対して行った変更は保存されません。
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_TEXT(vSprint_area)
 PAGE SETUP([MOVIES];"Print_List3")
 GET PRINTABLE AREA(vLprint_height)
 vLprinted_height:=0
 ALL RECORDS([MOVIES])
 
 vSprint_area:="Header" //ヘッダエリアの印刷
 $vLheight:=Print form([MOVIES];"Print_List3";Form header)
 $vLheight:=17 //固定高
 vLprinted_height:=vLprinted_height+$vLheight
 
 While(Not(End selection([MOVIES])))
    vSprint_area:="Detail" `詳細エリアの印刷
    $vLheight:=Print form([MOVIES];"Print_List3";Form detail)
  `詳細の計算はフォームメソッドで実行
    vLprinted_height:=vLprinted_height+$vLheight
    If(OK=0) `CANCEL がフォームメソッドで実行された
       PAGE BREAK
       vLprinted_height:=0
       vSprint_area:="Header" `ヘッダエリアの再印刷
       $vLheight:=Print form([MOVIES];"Print_List3";Form header)
       $vLheight:=17
       vLprinted_height:=vLprinted_height+$vLheight
       vSprint_area:="Detail"
       $vLheight:=Print form([MOVIES];"Print_List3";Form detail)
       vLprinted_height:=vLprinted_height+$vLheight
    End if
    NEXT RECORD([MOVIES])
 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") `詳細印刷実行中
  // vAct 変数を計算
       RELATE MANY([MOVIES]ID)
       RELATE ONE SELECTION([MOVIE_ACTOR];[ACTORS])
       vAct:=""
       $n:=Records in selection([ACTORS])
       For($i;1;$n)
          GOTO SELECTED RECORD([ACTORS];$i)
          vAct:=vAct+[ACTORS]FirstName+" "+[ACTORS]LastName+", "
       End for
       vAct:=Substring(vAct;1;Length(vAct)-2)
 
       OBJECT GET COORDINATES(*;"vAct";$l;$t;$r;$b)
       $fixed_wdth:=$r-$l  `Actors エリアサイズの計算
       $exact_hght:=$b-$t
       [#Tab   /]OBJECT GET BEST SIZE(*;"vAct";$wdth;$hght;$fixed_wdth)
  `内容に基づく最適なフィールドのサイズ
       $movement:=$hght-$exact_hght
 
       OBJECT GET COORDINATES([MOVIES]Summary;$l1;$t1;$r1;$b1)
       $fixed_wdth1:=$r1-$l1  `Summaryテキストフィールドサイズの計算
       $exact_hght1:=$b1-$t1
       OBJECT GET BEST SIZE([MOVIES]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(*;"vAct";$l;$t;$r;$hght+$t;*)
          OBJECT MOVE([MOVIES]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) `高さが不十分な場合
          CANCEL `次のページに移動
       End if
 End case
									Get print marker
									
									OBJECT GET BEST SIZE
									
									OBJECT GET COORDINATES
									
									OBJECT MOVE
									
									PAGE BREAK
									
									Print form
									
									PRINT RECORD
									
									PRINT SELECTION
									
	プロダクト: 4D
	テーマ: 印刷
	番号: 
        709
        
        
        
	
	変更: 4D 2003
	ランゲージリファレンス ( 4D v15.4)
	ランゲージリファレンス ( 4D v15.3)
 コメントを追加
コメントを追加