Delphi Programming / Object Pascal
[掲載 2000年12月12日] [更新 2016年04月25日] 印刷プレビュー制御コンポーネント
印刷プレビュー制御コンポーネント
用紙と印刷関係のプロパティ
動作確認等
-
凡例
■ published
□ public
▲ ReadOnly
用紙サイズ等の値に関係するプロパティです。
ViewWidth, ViewHeight は、例えば、印刷に使用する用紙のある領域内にだけに印刷する場合、その領域だけをプレビュー表示する等の用途に利用できます。
[備考]
用紙の幅、長さと、印刷可能な幅、長さは、プリンタ設定コンポーネントの同名のプロパティと意味は同じですが、印刷プレビュー制御コンポーネントでは、0.1 mm 単位の値です。
図1
用紙サイズとページの幅と高さ
点線の内側が描画可能 (印刷可能) 領域
同じ用紙サイズでも、プリンタによって違うことがある
▲ PaperWidth
Integer
用紙の幅
▲ PaperHeight
Integer
用紙の長さ
▲ PageWidth
Integer
用紙の印刷可能幅
▲ PageHeight
Integer
用紙の印刷可能長さ
□ ViewWidth
Integer
プレビュー画面上の用紙幅
デフォルトでは用紙幅と同じ
プリンタを変更すると、PaperWidth と同じ値に初期化
プリンタ指定のあとに設定する
□ ViewHeight
Integer
プレビュー画面上の用紙長さ
デフォルトでは用紙長さと同じ
プリンタを変更すると、PaperHeight と同じ値に初期化
プリンタ指定のあとに設定する
▲ PaperRatio
Double
用紙の縦横比 (PaperHeight / PaperWidth)
※ 印刷可能範囲の縦横比のプロパティはない
▲ ViewPaperRatio
Double
プレビュー画面上の用紙の縦横比で、
ViewHeight / ViewWidth の値
印刷オフセットは、プリンタの物理的な構造からくる印刷可能範囲に関係する値です。
このコンポーネントでは、右端と下端のオフセットの定義が通常のもと違っていますが、既にこのコンポーネントを利用したアプリケーションを多く作成してしまっているため、変更の予定はありません。ご了承下さい。
なお、プリンタの設定を変更してもオブジェクトインスペクタ上の値は自動では変化しません。IDE 起動時に読み込まれたプリンタの設定に基づいて表示されます。
オブジェクトインスペクタでプリンタの設定を変更した場合、上下左右のオフセットの値を、0 等の適当な値をセットすると再取得することができます。
[備考]
上下左右のオフセットの値は、プリンタ設定コンポーネントの同名のプロパティと意味は同じですが、印刷プレビュー制御コンポーネントでは、0.1 mm 単位の値です。
図2
オフセット値
点線の内側が描画可能 (印刷可能) 領域
オフセット値は、プリンタによって異なる
左と上のオフセット値も、使用する用紙によっても異なる場合がある
▲ LeftOffset
Integer
用紙左端のオフセット値
この座標値より左に描画コードを書いてもクリップされて印刷しない
▲ RightOffset
Integer
用紙右端のオフセット値
この座標値より右に描画コードを書いてもクリップされて印刷しない
▲ TopOffset
Integer
用紙上端のオフセット
この座標値より上に描画コードを書いてもクリップされて印刷しない
▲ BottomOffset
Integer
用紙下端のオフセット値
この座標値より下に描画コードを書いてもクリップされて印刷しない
印刷関係マージンとなっていますが、以下のプロパティは、グローバル変数として利用するための変数類です。主に印刷のマージンの設定での利用を想定して、Margin という名前にしています。
このコンポーネント自身は、これらの値を使用していません。実行中にも操作はしていません。利用者がグローバル変数として利用できるように実装している変数類です。ただし、便宜上、初期値を設定しています。
プリンタの設定を変更してもオブジェクトインスペクタ上の初期値は自動では変化しません。IDE 起動時に読み込まれたプリンタの設定に基づいて表示されます。
オブジェクトインスペクタでプリンタの設定を変更した場合、いずれかのマージンの値を、0 等の適当な値をセットすると初期化することができます。
[備考 1]
グローバル変数は、利用者が通常の方法で定義しても利用することができますが、コンポーネントのメンバとして定義してあれば、そのコンポーネントで使用する変数であることが明確になり、通常のグローバル変数との区別が容易になります。
[備考 2]
拙作のタックシール印刷、DBGrid 印刷、Query 印刷の各コンポーネントでは、これらのプロパティを、印刷領域の設定用、つまり、文字通り印刷マージンの設定に使用しています。
■ LeftMargin
Integer
初期値は LeftOffset と同じ値
設計時は、LeftOffset よりも小さい値には設定できない
■ RightMargin
Integer
初期値は RightOffset と同じ値
設計時は、RightOffset で決まる値より小さい値には設定できない
■ TopMargin
Integer
初期値は TopOffset と同じ値
設計時は、TopOffset よりも小さい値には設定できない
■ BottomMargin
Integer
初期値は BottomOffset と同じ値
設計時は、BottomOffset で決まる値より小さい値には設定できない
■ HeaderMargin
Integer
初期値は TopOffset と同じ値
設計時は、TopMargin より大きな値には設定できない
■ FooterMargin
Integer
初期値は BottomOffset と同じ値
設計時は、BottomMargin より大きな値には設定できない
規定用紙に印刷する場合など、印刷位置を調整したい時に使用します。印刷位置は、プリンタを変更すると、変わる場合があります。PrintOffsetX と PrintOffsetY プロパティを設定することによって、元の描画コードを変更せずに印刷位置を調整することが可能です。
■ PrintOffsetX
Integer
印刷位置の微調整に使用
この値が正の場合、印刷位置が全体に右に移動
プレビューは変化しない
■ PrintOffsetY
Integer
印刷位置の微調整に使用
この値が正の場合、印刷位置が全体に下に移動
プレビューは変化しない
Print メソッドでプレビューなしで直接印刷する場合などに使用します。プレビューなしで直接印刷する場合は、必ず指定します。プレビューする場合は、印刷のダイアログで指定します。
□ PrintFromPage
Integer
印刷開始頁の指定
デフォルトは 1
TPrintDialog の FromPage と同じ意味
□ PrintToPage
Integer
印刷の終了頁の指定
デフォルトは総頁数
TPrintDialog の ToPag と同じ意味
■ ViewClip
Boolean
印刷ではクリップされてしまう領域をプレビューでは表示可能にするためのフラグ
■ PaperColor
TColor
プレビュー時だけ有効な用紙の色
印刷時は塗潰しない
色付きの規定帳票類に印刷する際に、使用する用紙の間違をなくすための視覚効果を狙ったもの
印刷時に用紙全体を塗潰ししたい場合は、
Canvas の FillRect メソッ等を使用する
▲ Printing
Boolean
印刷中のフラグ
TPrinter の Printing プロパティと同じ値
このプロパティを利用すると、逐次表示方式の場合、コード中に印刷しない部分を指定することが可能
▲ AcrobatOut
Boolean
プリンタに Acrobat を指定すると True となる
□ InversePrint
Boolean
逆方向からの印刷フラグ
□ UseOriginPaperSize
Boolean
この値を True にすると、強制的に設計時の用紙サイズと印刷の方向にする
デフォルトは False
逐次表示方式の場合、Printing プロパティを利用することで、描画コードの中にプリンタには出力しないコードを含めることが可能です。以下のリストでは begin ~ end で囲まれた部分は、プレビューはしますが、印刷はしません。また、プレビューだけはして、実際の印刷はしないコードを書くためのイベント、OnNoPrintDraw もあります。
この機能は、例えば帳票類への印刷で、プレビューの背景に、その帳票のイメージを表示するような用途に利用できます。
copy code
// 印刷中でなければ実行
if not (plPrev1.Printing) then begin
plPrev1.Canvas.TextOut(500, 400, 'この部分は印刷しません' );
end ;
プリンタドライバによってはこの機能を備えているものがあります。InversePrint プロパティは、印刷プレビュー制御コンポーネントでこの機能を実現するためのものです。True にすると、通常とは反対方向から印刷します。この 180 度回転印刷は、出力先のプリンタ、使用する用紙サイズなどによっても精度が違う場合があります。正方向との印刷結果にズレが生じる場合があります。印刷位置調整プロパティなどで調整して使用してください。
プリンタにもよると思いますが、プリンタが実装してる同じ機能よりも精度はよいようです。
プリンタの上下左右のオフセット値が違うことがあります。特に上端のオフセットは小さく、下端のオフセットが大きい場合、用紙の下部に印刷できないことがあります。そのような時に、印刷方向を逆にすると、印刷の欠落を防ぐことができることがあります。
[備考]
プリンタドライバがこの機能をサポートしている場合、このプロパティの設定が無効になる場合があるようです。実際にどの方向から印刷されるか確認が必要です。
図3
逆方向印刷プロパティ