Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2000年12月12日] [更新 2016年04月19日] 印刷プレビュー制御コンポーネント
   
印刷プレビュー制御コンポーネント
使用方法
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成







TPrinter オブジェクト


この印刷プレビュー制御コンポーネントを使用するには,Delphi の TPrinter オブジェクト (クラス) を使用して,プリンタに出力,つまり印刷する基本的な方法を知っている必要があります.

この印刷プレビューコンポーネント TplPrve は,拙作のプリンタ設定コンポーネント TplSetPrinter を使用します.プリンタ設定コンポーネントの説明も参考にしてください.





簡単なテストプログラム


この印刷プレビュー制御コンポーネントの簡単な使用方法です.と言っても本質的な機能はこれだけです.後は描画コード,つまり印刷のコードをどう書くかだけです.
このテストプログラムでは TPrinter の Canvas と同じ様に印刷用のコードを書いていきます.違うのは
  • 寸法の単位は TPrinter ではドットだが,このコンポーネントではは 0.1 mm
  • EndDoc メソッドを実行しても印刷も表示もしない
  • ShowModal メソッドを実行すると印刷プレビューをする
ということです.この TPrinter の Canvas への描画と同じ様に BeginDoc 等を使用する方法を,このコンポーネントでは [先読み方式] と呼んでいます.
この方式では,印刷の頁全てをメタファイルにして,プレビューの際は,該当頁を取出して表示します.したがって,プレビュー開始までは少し時間がかかりますが,一度プレビューすると,イメージの表示切換えだけですので頁送りは高速です.この他に [逐次表示方式] があります.
プリンタの設定は,実行時にも同じプリンタと同じドライバが存在すれば,その設定を再現することができます.


図1
設計時画面
  • Delphiを起動
  • ボタンと本コンポーネントを配置
  • 下に示すコードを作成
図2
プリンタを選択
図3
プリンタのプロパティを設定
  • [Properties] をダブルクリックまたは
    [...] をクリック
図4
実行
  • 実行してボタンクリック

リスト1 
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.




先読み方式で複数頁の場合


以下のテストプログラムを参考にして下さい.





プリンタの設定を実行時に行う方法


以下のように,実行時にプリンタの設定を行うこともできます.使用可能なメソッドやプロパティはプリンタ設定コンポーネントのオンライン・マニュアルを参考にしてください.
実行時にコードで設定すると,設定した内容だけが変更されます.その他のプロパティは設計時のままとなります.ただし,プリンタを変更すると,ほとんどの場合,用紙サイズ,印刷の方向,ビン (用紙供給装置) 番号以外はそのプリンタのデフォルトの値となります.


リスト2 
//====================================================================
//  印刷プレビューコンポーネントの使用方法
//  プリンタの設定を実行時に行う方法
//====================================================================
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 のパスを,自分の開発環境に合わせて変更する
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}