最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

9.49.罫線を帳票につけたい(1)

[ Previous ] [ HOME ] [ Upper ] [ Next ]


印刷物に罫線をつける方法を説明します。これには、(1)5250の印刷装置制御コードの指定と、(2)DDSキーワード(BOX, LINE ※使ったことないです(ーー;))によるもの、(3)APWによるもの、(4)AFPによるもの、とがありますが、ここでは、(1) 5250の印刷装置制御コードの指定、について説明します。この機能もSYSTEM38から存在していました。というより、5250の機能として、昔からあったのですね。

印刷不能文字です

これは、プログラム内部記述(O仕様書)で、罫線コードを指定する方法です。このコードは、SCS(SNA Character String)コードと呼ばれます。尚、印刷装置ファイルは、必ず、RPLUNPRT(*NO)にしてください。このSCSコードそのものは、空白未満のコードを含み、それ自体がそもそも、印刷不能文字なのです。これを、別の値に置き換えて、スプールしてしまうと、そのコードが働かなくなります(置き換えられたコードがプリンターに渡るので、無意味になるわけです。)また、コードを間違えると、印刷不能文字なので、バシバシと印刷不能文字を含むものとして、保留されます。正しい値であれば、印刷不能文字であっても、実際に印刷すると、何事もなく、飲み込まれ、期待通りの印刷結果が出てきます。

SCS制御コードの形式

値はすべて、16進数で指定します。

制御コード カウント パラメータ1 パラメータ2 ...
1 or 2 byte 1 byte 1 or 2 byte 1 or 2 byte

マニュアル 「日本語5250ワークステーション・プログラム使用者の手引き」 第七章 印刷装置の制御コードより

印刷装置の罫線指定 Define Grid Line (DGL)

機能

この制御コードは、罫線の位置の指定と印刷の開始および中止を制御します。

形式  

dgl.gif (12304 バイト)

nn カウント

制御コードに続く、パラメータ(カウント自体も含む)のバイト数を1バイトで示しています。たとえば、1バイトのパラメータを2つ伴っている場合のカウントは、カウント自身を含めるので、x'03'になります。

xx ラインタイプ

00 細線
01 太線
02 2重線(細)
08 破線(細)
09 破線(太)
0A 2重破線(細)

yy オプション

00 罫線中止と罫線情報の消去
40 垂直方向の罫線の印刷開始
80 G1からGnで指定された区間への水平方向の罫線の印刷
C0 垂直、水平方向の罫線の印刷開始

G1 - Gn

左マージンからの位置を、1/1440インチ(2.54/1440cm)単位で設定する2バイトのパラメータです。但し、これらの数値は数の小さい値から順番に並べてください。そうしないと、パラメータは無視されます。

注意 : G1〜Gnの値は、パラメータyyの値によって下記に示す制約を受けます。

yy 00 G1〜Gnは無視されます。
40 垂直方向の罫線が各Gi (1≦i≦n) から印刷されます。
80 G1〜Gnまで水平方向の罫線が印刷されます。(n=1の場合は、点(ドット)が印刷されます。)
C0 垂直方向の罫線が各Giから印刷され、水平方向の罫線がG1からGnまで印刷されます。
nn

00〜01の場合はDGL制御コードは無効です。G1からGnまでのパラメータはすべて2バイトのため、カウントnnは、それが5以上の場合、必ず偶数にしてください。偶数でない場合は、DGL制御コードは無効です。

コーディング例

制御コード

01 02 03 04 05 06 07 08
2B FD 08 00 00 80 2D 00 33 30
10進数11520 10進数13104
固定情報

カウンター

固定情報 細線

水平方向の罫線印刷

1440×8 : 行の左端から8インチの位置から罫線印刷

1440×9.1 : 行の左端から9.1インチの位置まで罫線印刷


わかりやすい解説(だといいな)

以上は、マニュアルの丸写し(WWWマニュアルには出ていない内容)ですが、これだけでは、とてもわかりにくいですね。そこで、解説をしていきます。上記パラメータのうち、nn, xx, yyは、さほど難しくないですね。問題は、2バイトのパラメータ、G1からGnの部分ですね。徹底的に、ここを理解しましょう。

1/1440インチとはどういう意味か

マニュアルの文言「1/1440インチ(2.54/1440cm)単位で設定する」、「(n=1の場合は、点(ドット)が印刷されます。)」と言う言葉から分かるように、1/1440インチ=2.54/1440cm、つまりは、1(インチ)対1440(ドット)という比例関係を表していますね。これは、「1インチあたりのドッド数は1440個」という事です(実は、「ドット」かどうかは分からないのですが、この方が分かりやすいので、こう書きます。)。これは、重要なことです。印刷関係で、1インチあたり...といえば、CPI(character per inch)ですね。1インチあたりの文字数が10で、それが1440ドットならば、1文字あたり、144ドットですよね。10cpiならば144ドット、12cpiならば120ドット、15cpiならば96です。この文字数を元に、罫線の位置を指定する方が楽ですね。

どうして、2バイトなのか

「1/1440インチとはどういう意味か」を踏まえて、最大は、144×132=19008ですね。1バイトの16進数が表現できる10進数は、0から255までで、ぜんぜん足りません。しかし2バイトだと、0から65535となりますので、十分に足ります。これで、このパラメータが2バイト必要なわけです。

カウントnnは、それが5以上の場合、必ず偶数にしてください、って?

制御コード

パラメータバイト数
01 02 03 04 05 06 07 08
2B FD 08 00 00 80 G1 G2

結局、カウントが5以上の「カウントが05」の位置は、G1なのですが、G1〜Gnは1パラメータ長が、2バイトなので、カウントが5以上の場合は、カウント=4 + 2n = 2 (2+n) = (ここで2+nをiとすると) 2i となるので、必ず、偶数になるのです。ところで、分からないのは、「00〜01の場合はDGL制御コードは無効です。」の部分です。00,01が無効なのはいいんですが、じゃあ02,03は有効なんでしょうか?ちなみに、04は、2BFD04000000で消去になりますね。

yyとG1〜Gnの関係

yy=40 : 垂直

prtgrdv.gif (2301 バイト)

制御コード パラメータバイト数
01 02 03 04 05 06
2B FD 06 00 00 40 v1

prtgrdv2.gif (3690 バイト)

制御コード パラメータバイト数
01 02 03 04 05 06 07 08 09 0A
2B FD 0A 00 00 40 v1 v2 v3

yy=80 : 水平

prtgrdh.gif (2444 バイト)

制御コード パラメータバイト数
01 02 03 04 05 06 07 08
2B FD 08 00 00 80 h1 h2

prtgrdh2.gif (3361 バイト)

制御コード パラメータバイト数
01 02 03 04 05 06 07 08 09 0A 0B 0C
2B FD 0C 00 00 80 h1 h2 h3 h4

だいたい、これでお分かりだと思います。最初に印刷不能文字だと言ったのは、この制御コード〜Gnの部分のことです。値はみな16進数なので、もう制御コード自体が、「印刷不能文字」ですね。でも、このコードで始まるものだけは、エラーにならずに、罫線の命令になります。罫線以外のSCS制御コードは、9.29. SNA Character String Codeについて を参考にしてください。文字の倍角やら、たて倍横倍とか、あります。

具体的なコーディングは、9.53. 罫線を印刷物につけたい(2) にて説明します。

続く...

2000-8-8


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送