SET PRINT MARKER

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 2003 (Modified)


SET PRINT MARKER (markNum; position{; *})

引数説明
markNum数値マーカ番号
position数値マーカの新しい位置
**指定時 = 後続のマーカを移動する
省略時 = 後続のマーカを移動しない

説明

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

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

PRINT SELECTIONおよびPRINT RECORDコマンドのコンテキストでのOn headerフォームイベント中。

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

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

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

定数
Form Header倍長整数200
Form Header1...10倍長整数201...210
Form Detail倍長整数0
Form Break0...9倍長整数300...309
Form Footer倍長整数100

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")   `詳細印刷実行中
         GET OBJECT RECT([Film]Actors;$l;$t;$r;$b) 
         $fixed_wdth:=$r-$l   ` Actors キストフィールドサイズの計算
         $exact_hght:=$b-$t
         BEST OBJECT SIZE([Film]Actors;$wdth;$hght;$fixed_wdth)
            `内容に基づく最適なフィールドのサイズ
         $movement:=$hght-$exact_hght
   
         GET OBJECT RECT([Film]Summary;$l1;$t1;$r1;$b1)
         $fixed_wdth1:=$r1-$l1   `Summaryキストフィールドサイズの計算
         $exact_hght1:=$b1-$t1
         BEST OBJECT 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;*)
               `キストエリアのサイズ変更
            MOVE OBJECT([Film]Actors;$l;$t;$r;$hght+$t;*)
            MOVE OBJECT([Film]Summary;$l1;$t1;$r1;$hght1+$t1;*)
   
               `分離線のリサイズ
            GET OBJECT RECT(*;"H1Line";$l;$t;$r;$b)
            MOVE OBJECT(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*)
            For ($i;1;4;1)
               GET OBJECT RECT(*;"VLine"+String($i);$l;$t;$r;$b)
               MOVE OBJECT(*;"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:=printing_height-vLprinted_height
         If($hght_remaining<$hght_to_print)   `Insufficient height
            CANCEL   `次のページに移動
         End if 
   End case

参照

BEST OBJECT SIZE, GET OBJECT RECT, Get print marker, MOVE OBJECT, PAGE BREAK, Print form, PRINT RECORD, PRINT SELECTION.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次