プログラム講座 初級編6

- プリンタにPICT画像を印刷してみよう -

 初級編6です。今回はPICT画像を読み込んでプリンタに印刷してみます。という事でプリンタがない方は目を通すだけでいいと思います。もしくはPrint2pictだったか(すみません、名前忘れました^^;)をプリンタとして使用すればPICTファイルにして出力してくれます。
 私の手持ちのプリンタはいくつかありますが、貸し出したプリンタもあるため手元にはPostScriptプリンタ(レーザー系)しかありません。ここで出てくるプリントの設定画面は全て、このプリンタ用の画面ですので、各自手持ちのプリント画面とは異なりますので、あらかじめご了承下さい。ちなみに、このプリンタはQMS PS460Jというやつです。(だから、どうした?と言われても困りますが^^;)




◆どうやって印刷すればいいのかな?
 今までは画面上にのみ表示しましたが、今度はプリンタ(つまり紙)という事で勝手が違うのではないかと思われる方もいるでしょう。細かい部分は確かに違いますが、画面に出力するのとなんら変わりありません。
 Future BASICでは通常、画面に文字や画像を表示するようになっていますが、この出力先をプリンタにするだけでおしまいです。
 この切替を行う命令が、

ROUTE 出力先

 という命令です。この指定に画面かプリンタかを指定するだけです。画面に出力する場合は、

ROUTE _toScreen

 と指定します。プリンタに出力する場合は、

ROUTE _toPrinter

 とすればOKです。これでQuickDrawを扱うものはプリンタ側に出力されます。文字を表示したりするPRINT命令やツールボックスコールのCALL DRAWPICTUREもプリンタ側に出力されます。

 また、レーザープリンタとかQuickDrawプリンタなどの区別は基本的にありません(内部ではレーザー系とQuickDraw系で値が設定してあります。そこでレーザー系とか見分けます)。




◆用紙設定ダイアログと印刷ダイアログ
 普通のアプリケーションでは(例えばSimpleText等)ファイルメニューの中に用紙設定というメニューと印刷というメニューがあります。今回はこれらのメニューは用意していません。こういう具合にやっているんだな、という事で(初級編ですので^^;)実行すると「用紙設定ダイアログ」と「印刷ダイアログ」が表示されるようにしてあります。また、キャンセルの処理もしていませんので、キャンセルしても次々とダイアログが出てきます(もっとも、1枚しか印刷しないのですが)。
 設定された用紙サイズを読むこともできますが、今回は印刷するだけですので、そこまではやっていません。
 以下に用紙設定ダイアログと印刷ダイアログを示します。
 (上が用紙設定、下が印刷ダイアログ)






◆画像を描画する
 今回は違う命令を使って画像を描画してみます。
その命令は

PICTURE (X座標,Y座標),画像のハンドル

 という命令です。X座標、Y座標は表示する位置を示します。縮小サイズとかも設定できますが、今回は原寸大にしてあります。余談ですが、この命令はツールボックスのCALL SETRECT(rect,x1,y1,x2,y2):CALL DRAWPICTURE (pictHandle&,rect)と同じです(のはず^^)。この2つの命令が1つになったと思えばいいでしょう。楽な方を使用すればいいでしょう。

 あとPICT画像を読み込む関数は以前のものを流用しています。詳しくは初級編の前の講座を読んで下さい。



◆終わりに
 Macintoshが現在、生き残っているのはDTPとムービーなどハイエンドの分野です。もちろん一般ユーザーもたくさんいます。DTPソフトを作ることはないでしょうけど、印刷はちょっとしたエディタなど、ほとんどのアプリケーションに必要なものです。
 幸いにして切替などは非常に楽ですので、PRINT文で印刷日時を印刷するようにしてみるのもよいでしょう。

 次回は・・・上級編とか書かないと駄目かな(^^; でも、私は全然上級でないので、なんともはや(笑)



◆今回のプログラムリスト
'------------------------------------------------------------- ' "PICTファイルをオープンする" '------------------------------------------------------------- LOCAL FN openPictFile f$ = FILES$(_fOpen,"PICT",,vRefNum%) LONG IF f$<>"" OPEN "I",#1, f$,,vRefNum% fileSize& = LOF(1,1) pictHandle& = FN NEWHANDLE(fileSize&+4) LONG IF pictHandle& err = FN HLOCK(pictHandle&) LONG IF err = 0 READ FILE#1, [pictHandle&], fileSize& BLOCKMOVE [pictHandle&]+512,[pictHandle&],fileSize& - 512 err = FN HUNLOCK(pictHandle&) err = FN SETHANDLESIZE(pictHandle&, fileSize&-512) END IF XELSE BEEP ROUTE _toScreen PRINT "メモリ不足じゃあ! メモリを増やさんかい!" EXIT FN END IF CLOSE #1 END IF END FN LOCAL FN printers WINDOW #1,"Pict File View",(32,32)-(512+32,400+32),_docNoGrow FN openPictFile WINDOW OUTPUT #1 COORDINATE WINDOW: ' "72dpiに設定(なんだろうか^^;)" DEF PAGE: ' "ここが用紙設定(なくてもよいのだが一応入れてある)" DEF LPRINT: ' "ここが印刷ダイアログ(これがないと印刷できない)" ROUTE _toPrinter: ' "出力をプリンタ側に設定" PICTURE (0,0),pictHandle&: ' "読み込んだ画像を出力(72dpi)" ROUTE _toScreen: ' "出力を画面側に設定" err = FN DISPOSHANDLE(pictHandle&): ' "ハンドルを破棄(これがないとメモリにごみがたまる)" CLOSE LPRINT: ' "この命令でページ送り。つまり一枚出力という事" END FN FN printers END