Delphi Programming / Object Pascal
[掲載 2000年12月12日] [更新 2016年04月19日] 印刷プレビュー制御コンポーネント
印刷プレビュー制御コンポーネント
使用方法
動作確認等
Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成
この印刷プレビュー制御コンポーネントを使用するには、Delphi の TPrinter オブジェクト (クラス) を使用して、プリンタに出力、つまり印刷する基本的な方法を知っている必要があります。
この印刷プレビューコンポーネント TplPrve は、拙作のプリンタ設定コンポーネント TplSetPrinter を使用します。プリンタ設定コンポーネントの説明も参考にしてください。
この印刷プレビュー制御コンポーネントの簡単な使用方法です。と言っても本質的な機能はこれだけです。後は描画コード、つまり印刷のコードをどう書くかだけです。
このテストプログラムでは TPrinter の Canvas と同じ様に印刷用のコードを書いていきます。違うのは
寸法の単位は TPrinter ではドットだが、このコンポーネントではは 0.1 mm
EndDoc メソッドを実行しても印刷も表示もしない
ShowModal メソッドを実行すると印刷プレビューをする
ということです。この TPrinter の Canvas への描画と同じ様に BeginDoc 等を使用する方法を、このコンポーネントでは [先読み方式] と呼んでいます。
この方式では、印刷の頁全てをメタファイルにして、プレビューの際は、該当頁を取出して表示します。したがって、プレビュー開始までは少し時間がかかりますが、一度プレビューすると、イメージの表示切換えだけですので頁送りは高速です。この他に [逐次表示方式] があります。
プリンタの設定は、実行時にも同じプリンタと同じドライバが存在すれば、その設定を再現することができます。
図1
設計時画面
Delphiを起動
ボタンと本コンポーネントを配置
下に示すコードを作成
図2
プリンタを選択
図3
プリンタのプロパティを設定
[Properties] をダブルクリックまたは
[...] をクリック
図4
実行
copy code
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, plPrev, StdCtrls;
type
TForm1 = class (TForm)
Button1: TButton;
plPrev1: TplPrev;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end ;
var
Form1: TForm1;
implementation
uses
Printers;
{$R *.DFM}
// ====================================================================
// 印刷プレビューコンポーネントの簡単な使用方法
//
// TPrinerによる印刷同様、BeginDoc~EndDocメソッドを使用する
// 必要に応じて階頁のNewPageメソッドを使用する
// 印刷(描画)コードは本コンポーネントのTCanvasを使用する
// ====================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
// 印刷用のコードを書く
plPrev1.BeginDoc;
try
plPrev1.Canvas.Font.Height := 180 ;
plPrev1.Canvas.TextOut(200 , 300 , '印刷プレビューの簡単なテスト' );
finally
plPrev1.EndDoc;
end ;
// プレビューフォームのサイズと位置を設定
// 自動生成なので、そのためのプロパティがある
// 指定しなければデフォルト値となる
plPrev1.FormPosition := poDesktopCenter;
plPrev1.FormWidth := 600 ;
plPrev1.FormHeight := 450 ;
// プレビュー開始
plPrev1.ShowModal;
end ;
end .
以下のように、実行時にプリンタの設定を行うこともできます。使用可能なメソッドやプロパティはプリンタ設定コンポーネントのオンライン・マニュアルを参考にしてください。
実行時にコードで設定すると、設定した内容だけが変更されます。その他のプロパティは設計時のままとなります。ただし、プリンタを変更すると、ほとんどの場合、用紙サイズ、印刷の方向、ビン (用紙供給装置) 番号以外はそのプリンタのデフォルトの値となります。
copy code
// ====================================================================
// 印刷プレビューコンポーネントの使用方法
// プリンタの設定を実行時に行う方法
// ====================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
// 用紙サイズと印刷の方向(ここでは横)を設定
// poLandscape等の定数名の使用にはusesにPrintersが必要
plPrev1.plSetPrinter.PaperNumber := DMPAPER_A5;
plPrev1.plSetPrinter.Orientation := poLandscape;
// 印刷用のコードを書く
plPrev1.BeginDoc;
try
plPrev1.Canvas.Font.Height := 100 ;
plPrev1.Canvas.TextOut(150 , 300 , 'プリンタの設定例' );
finally
plPrev1.EndDoc;
end ;
// プレビュー開始
plPrev1.ShowModal;
end ;
継承フォームを使用するプロジェクトについての注意です。
添付のテストプログラムには、継承フォームを使用したものがあります。それらのプロジェクトを IDE で起動しても、継承フォームを表示することはできません。継承フォームを表示するには、プロジェクトのソースコード内の、継承元のフォームファイルの場所を変更してください。
plPrevfrm.pas がライブラリパスが通った場所にあれば、継承したフォームが表示できなくても、コンパイルは可能です。
リスト3
継承フォームを使用したプロジェクトのソースコードの例
plPrevfrm.pas のパスを、自分の開発環境に合わせて変更する
copy code
program BitMapTest;
uses
Forms,
BitMapTestUnit in 'BitMapTestUnit.pas' {Form1} ,
Unit2 in 'Unit2.pas' {plPrevForm2} ,
Unit1 in 'Unit1.pas' {plPrevForm1} ,
plPrevfrm in 'D:\XRAYpl\plPrevfrm.pas' {plPrevForm} ; // パスを変更する
{$R *.RES}