ME10マクロのページです
(印 刷)

2004.01.03 更新 



リスト


macro.lzh#(マクロファィルです。)

新規 1.2004.01.03 分割印刷
     (一枚に入りきらないデータを分割して、印刷します。)



{分割印刷
2004.01.03

下記の値は、プロットメニューの値に依ります。
位置、尺度、回転角など(出力範囲は、BOXに固定)
回転角が90度の場合は、プリンターの可能幅、長を入れ替えて入力して下さい。
}
DEFINE Ma_splitprint
  LOCAL Memo_mgr                                  {プリントマネージャーの状態記憶}
  LOCAL Memo_scale                                {プリント倍率の記憶}
  LOCAL Memo_source                               {プリント範囲の記憶}
  LOCAL Scale                                     {尺度}
  LOCAL Area_x                                    {プリント可能幅}
  LOCAL Area_y                                    {プリント可能長}
  LOCAL Point01                                   {プリント位置入力}
  LOCAL Point02
  LOCAL Boundary_l                                {プリント指示左端}
  LOCAL Boundary_r                                {プリント指示右端}
  LOCAL Boundary_t                                {プリント指示天端}
  LOCAL Boundary_b                                {プリント指示地端}
  LOCAL Printarea_l                               {プリント位置左端}
  LOCAL Printarea_r                               {プリント位置右端}
  LOCAL Printarea_t                               {プリント位置天端}
  LOCAL Printarea_b                               {プリント位置地端}
  LOCAL Mgroff                                    {プリントマネージャーの非表示チェッカー}

  LET Memo_mgr Nt_print_mgr_option                {プリントマネージャーのON/OFF記憶}
  LET Memo_source Sys_plot_source                 {プロット範囲の記憶}
  LET Memo_scale sys_plot_plotscale               {プリント倍率の記憶}

{尺度の取得}
  INQ_ENV 19
  LET Scale (INQ 4)                               {現在の図面尺度}

{プリンターの印字可能範囲の指示}
  LOOP
    READ NUMBER '** プリンターの印刷可能幅を ミリメートルで指示して下さい。**' Area_x
  EXIT_IF (Area_x > 0)
  END_LOOP


  LOOP
    READ NUMBER '** プリンターの印刷可能長を ミリメートルで指示して下さい。**' Area_y
  EXIT_IF (Area_y > 0)
  END_LOOP

  IF (Memo_scale = 0)                         {フィットなら}
    Set_sys_plot_plotscale 1
  END_IF


  LET Area_x (Area_x / Scale / Sys_plot_plotscale)  {入力値の表示尺度とプリント倍率による補正}
  LET Area_y (Area_y / Scale / Sys_plot_plotscale)

  READ PNT '** 印刷範囲の最初の点を指示して下さい。**' Point01
  LOOP
    READ PNT '** 印刷範囲の次の点を指示して下さい。**' RUBBER_BOX Point01 Point02
  EXIT_IF (((X_OF Point01) <> (X_OF Point02)) AND ((Y_OF Point01) <> (Y_OF Point02)))
  END_LOOP

{プリント範囲の記憶}
  IF ((X_OF Point01) < (X_OF Point02))
    LET Boundary_l (X_OF Point01)
    LET Boundary_r (X_OF Point02)
  ELSE
    LET Boundary_l (X_OF Point02)
    LET Boundary_r (X_OF Point01)
  END_IF


  IF ((Y_OF Point01) > (Y_OF Point02))
    LET Boundary_t (Y_OF Point01)
    LET Boundary_b (Y_OF Point02)
  ELSE
    LET Boundary_t (Y_OF Point02)
    LET Boundary_b (Y_OF Point01)
  END_IF

{分割プリント}
  LET Mgroff 0
  LET Printarea_t Boundary_t
  LET Printarea_b (Boundary_t - Area_y)
  LOOP
    LET Printarea_l Boundary_l
    LET Printarea_r (Boundary_l + Area_x)
    LOOP
      IF (Mgroff = 0)                             {初回なら}
        Print_mgr_option_on
      ELSE
        Print_mgr_option_off
      END_IF


      Set_sys_plot_source TWO_PTS                 {プロット範囲をBOXに指定}
      Set_sys_plot_source_ll (PNT_XY Printarea_l Printarea_b)   {印字範囲の左下}
      Set_sys_plot_source_ur (PNT_XY Printarea_r Printarea_t)   {印字範囲の右上}
      IF (Memo_scale = 0)                         {フィットなら}
        Set_sys_plot_plotscale 1
      END_IF


      TRAP_ERROR                                  {エラーを取得}
      PLOT_STOP_ON_ERROR ON                       {プロットエラーでストップする}
      Plot_start                                  {プロット}
      Set_sys_plot_plotscale Memo_scale           {プロット尺度の復元}
      Set_sys_plot_source Memo_source             {プロット範囲の復元}
      LET Mgroff (Mgroff + 1)
      LET Nt_print_mgr_option Memo_mgr            {プリントマネージャーのON/OFF復元}
      PLOT_STOP_ON_ERROR OFF
      IF (CHECK_ERROR = 1)
        DISPLAY ('** ' + ERROR_STR + '**')
        CHECK_ERROR
        CANCEL                                    {取り消し}
      END_IF


    EXIT_IF (Boundary_r <= Printarea_r)
      LET Printarea_l Printarea_r
      LET Printarea_r (Printarea_l + Area_x)
      IF (Boundary_r < Printarea_r)               {余り部分なら}
        LET Printarea_r Boundary_r
      END_IF


    END_LOOP

  EXIT_IF (Boundary_b >= Printarea_b)
    LET Printarea_t Printarea_b
    LET Printarea_b (Printarea_t - Area_y)
    IF (Boundary_b > Printarea_b)                 {余り部分なら}
      LET Printarea_b Boundary_b
    END_IF


  END_LOOP

END_DEFINE



気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表