プログラム講座 初級編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