Yamamoto Software / 開発メモ

このページでは開発にまつわるあれこれを取り留め無く記述して行きます。
ご意見・ご感想はメールかサポート掲示板にお寄せください。
戻る
2004年11月09日を表示
2004年 11月 09日
封筒で四苦八苦
 葉書ABで封筒の印刷をサポートしました。やってみると封筒と云うのは結構厄介な物で、まず種類とサイズが色々と有ってどれをサポートするかで悩みます。全てをやるのも大変なので、結局近所の文房具屋の品揃えを参考に角形と長形を数点ずつとしました。最もサイズのバリエーションはプログラムとは関係なくリソースの追加だけなので今後も少しずつ増やして行こうと思います。

 プログラム的な問題としてはベロの存在です。葉書は形とサイズが1種類に固定されているので簡単なのですが、封筒にはベロ―封をするための折り返し部分ですね―があるのでその分だけ印刷がずれてしまいます。しかもベロを伸ばして印刷する場合と閉じて印刷する場合も考える必要が有り、更に悪い事にはベロの高さは規格に成っていない様子です。

 この問題の解決策は、なんとユーザーにベロの高さを決めてもらうと云う物でした。ユーザーとすれば自分で測って、しかもミリ単位で、入力すると云う面倒な作業を強いられてしまいますが、どうも妙案が思いつきません。いっその事印刷する時に180度回転してお尻からプリンタに入れてもらうと云う手も有るかも知れませんが、プリンタのPPDはそういう印刷方法を考慮していないでしょうし、何かと混乱の元に成りそうです。何か良いアイデアが有る方は是非教えて下さい。

 もう1つの問題はイメージの拡大・縮小が必要に成る事でした。今までは葉書だけでしたので不要だったのですが、封筒はサイズも色々で固定サイズでは全てを表示出来ません。表示イメージの拡大・縮小はbounds(*1)のサイズを変更する事で簡単に実現できます。いやー、Cocoaはホントに楽ですね。お次はウインドウのリサイズとスクロールに対応しなくてはなりませんが、これはNSScrollView(*2)というクラスの担当です。そこでNSScrollViewを使ってみたのですが期待通りの動きをしてくれません。すなわち、ウインドウサイズを小さくする時の動作には問題は無いのですが、大きくして行ってイメージ全体が表示された時の動きが問題です。普通の画像表示系ソフトの場合、例えばPhotoShopなど、イメージ全体を表示する時はウインドウ中央に配置します。大抵の人はこの様な動作を期待すると思うのですが、NSScrollViewはdocumentView(*3)の座標系原点に配置します。葉書ABの場合は左下点が原点ですので何とも奇妙な表示になります。左上点ならまだマシなのですが、そうする為には葉書ABの座標系を変更する必要が有ります。それは出来ない相談ですし、NSScrollViewの動作を変えるメソッドは用意されていない様です。これは大変不便な状況と云えます。
 結局この問題はNSClipView(*4)をサブクラス化する事で解決出来ましたが、AppleにはNSScrollViewをもう少し使いやすくして欲しい所です。全般的にCocoaには満足しておりますがこの点は今イチですね。

 今回は少し技術的な話に成ってしまいプログラムに興味の無い方には申し訳無いです。最後に、11月号のMacPeople誌に葉書ABの紹介記事が載っていました。このMacPeople誌の編集者は大変優しい人達の様でいつも見本誌を送ってくれます。この場を借りてお礼を申し上げます。さて、その紹介記事にQRコード(*5)を作成する「QRこ〜でんネン!」というソフトも合わせて紹介してありました。これを見てQRコードに興味が湧き、葉書ABでのサポートも検討中です。
----------------
*1: ビューの内部座標で矩形領域を表すインスタンス変数。
 他にframeという外部座標での領域を表す変数も有る。
*2: Cocoaの提供するクラスでビューにスクロールバーなどを追加したもの。
*3: NSScrollViewが内部に保持するビューで葉書ABの場合は葉書イメージを表示している部分。
 実はNSScrollViewが直接管理するのではなく間にNSClipViewが介在している。
*4: documentViewをどう見せるかを制御しているビュー。
 NSScrollViewとdocumentViewの間に立って結構頑張っている。
*5: 「QRコード」は(株)デンソーウェーブの登録商標です。
戻る