Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2002年03月06日] [更新 2016年04月20日] プリンタ設定コンポーネント
プリンタ設定コンポーネント
ユーザ定義用紙の作成と削除
動作確認等 図は Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成







ユーザ定義用紙の作成と設定


SetUserPaper(UserPagerName,CustomW,CustomH)

実行時にユーザ定義用紙を作成して、その用紙を選択した状態にします。
設定に成功すると True を返し、失敗すると False となり、用紙は前の値に戻されます。このメソッドでは、印刷の方向など、用紙サイズ以外の設定値は変更しません。それまでの設定値のままです。


引数 説明
UserPaperName String ユーザ定義用紙の名前
半角 32 文字以内の任意の文字列
CustomW Integer 用紙の幅を 0.1 mm 単位で指定
CustomH Integer 用紙の長さを 0.1 mm 単位で指定


この関数で用紙名を登録すると、プリントサーバの用紙のリストに追加されます。
ただし、該当するプリンタがサポートしない用紙サイズは使用できません。

独自のプロパティのダイアログを実装しているプリンタドライバには、ユーザ定義サイズを独自に管理する機能を持つものがあります。そのようなプリンタでは、用紙名が設定できない場合があります。用紙サイズそのものは設定できるようです。



図1
ユーザ定義用紙が登録されている状態
  • これは Window 7 でのダイアログ
  • プロパティのダイアログから [詳細] をクリックして表示したダイアログ
  • 赤枠がユーザ定義の用紙名
  • これらの用紙は、他のプリンタでも利用することができる
  • ユーザ定義サイズを独自に管理しているドライバでは、このダイアログを表示する機能はないが、これらの用紙が選択可能なものもある




ユーザ定義用紙の削除


DeleteUserPaper(UserPaperName)

SetUserPaper メソッドで作成した用紙を削除します。削除に成功すると True を、失敗すると False を返します。用紙名が存在しない場合は False を返します。
用紙名が存在しない場合は、削除の必要がないので、True を返してもいいのですが、そうすると、ユーザ定義サイズを独自に管理しているプリンタドライバの場合に、削除できないのに True を返してしまいます。そのため、この動作仕様になっています。
Windows 9X では常に True を返します。

ユーザ定義サイズを独自に管理する機能のプリンタドライバでは、この関数の実行が失敗して、False を返す場合があります。また、実際に削除できなくても True を返す場合もあります。


引数 説明
UserPaperName String 作成済みのユーザ定義用紙名を指定




用紙名とサイズ設定と削除の注意


用紙サイズに、規定用紙である A4, A5 などに相当する値を指定すると、該当する用紙名を選択しますが、ユーザ定義用紙名も作成されてしまいます。
本コンポーネントを使用したアプリケーションを実行中に用紙を削除してしまうと、予期しない結果を生じることがあります。
また、印刷スプールにデータがある場合も、印刷に障害が発生することがあります。




ユーザ定義用紙が削除できない例


登録したユーザ定義用紙が削除できない例です。
下図は、ユーザ定義用紙サイズをプリンタドライバが独自に管理しているプリンタの例です。
最初の図は、[テスト用紙] という名前で、 1200 x 1800 のサイズを設定した結果です。名前は登録できていませんが、サイズは設定されています。このまま [OK] でダイアログを閉じれば設定したサイズが有効となります。

この設定は、DeleteUserPaper では削除できません。その下の図のように、[テスト用紙] という名前を、ダイアログで登録しても、DeleteUserPaper は True を返しますが、実際にはこの用紙は削除できません。
プリンタ設定コンポーネントでは、プリンタドライバ独自の機能は操作できません。

プリンタドライバ独自の機能を操作、制御するには、それらを操作するための資料が必要です。プリンタのメーカが、それらの情報を提供していれば入手することができます。



図2
図3