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







TPrinter オブジェクト


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

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





逐次表示方式として使用する場合の例


逐次表示方式は,プレビュー画面で頁送りを行った時に,その頁のメタファイルを作成しながら描画します.したがって,複雑な描画コードの場合は,頁送りに時間がかかりますが,プレビュー画面に入力用のコントロールを配置し,その入力を直ちにプレビューに反映することが可能です.
  • 単票形式の印刷
  • 1 頁が 1 レコードに相当するクエリーの結果の印刷
等の用途に向いています.逐次表示方式では,BeginDoc ~,EndDoc メソッドは使用しません.かわりに描画用のメソッドを利用者が作成して,そのメソッド内に描画コードを記述します.このメソッドは引数なしのクラスメソッドしか使えません.
プリンタの設定は,実行時にも同じプリンタと同じドライバが存在すれば,その設定を再現することができます.


図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 宣言 }
    procedure HogeHoge;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  Printers;

{$R *.DFM}

//====================================================================
//  逐次表示方式のコード
//
//  描画用クラスメソッドを作成する(ここではHogeHogeという名前).
//  このメソッド名をProcNameプロパティに指定する.
//  総頁数をPageCountに指定する
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //用紙の印刷方向を横にする
  //poLandscape等の定数名の使用にはusesにPrintersが必要
  plPrev1.plSetPrinter.Orientation:=poLandscape;

  //印刷用のメソッドと頁数を設定
  plPrev1.ProcName   := HogeHoge;
  plPrev1.PageCount  := 3;

  //プレビューフォームのサイズと位置を設定
  //自動生成なので,そのためのプロパティがある
  //指定しなければデフォルト値となる
  plPrev1.FormPosition := poDesktopCenter;
  plPrev1.FormWidth    := 660;
  plPrev1.FormHeight   := 450;

  plPrev1.ShowModal;
end;
//====================================================================
//  描画用メソッド
//  このメソッド内に本コンポーネントのTCanvasを使用したコードを記述   
//  複数頁の場合は,頁番号によって処理を分岐する.
//====================================================================
procedure TForm1.HogeHoge;
begin
  //全頁共通のコード
  plPrev1.Canvas.Font.Height:=200;
  plPrev1.Canvas.TextOut(250,300,'逐次表示方式');

  //頁番号によって異なるコード
  case plPrev1.PageNumber of
  1:begin
      plPrev1.Canvas.Font.Color :=clRed;
      plPrev1.Canvas.Font.Height:=160;
      plPrev1.Canvas.TextOut(250,900,'最初の頁です');
    end;
  2:begin
      plPrev1.Canvas.Font.Color :=clBlue;
      plPrev1.Canvas.Font.Height:=160;
      plPrev1.Canvas.TextOut(250,900,'真ん中の頁です');
    end;
  3:begin
      plPrev1.Canvas.Font.Color :=clGreen;
      plPrev1.Canvas.Font.Height:=160;
      plPrev1.Canvas.TextOut(250,900,'最後の頁です');
    end;
  end;
end;

end.




継承フォームを使用したテストプログラムの利用方法


継承フォームを使用するプロジェクトについての注意です.
添付のテストプログラムには,継承フォームを使用したものがあります.それらのプロジェクトを IDE で起動しても,継承フォームを表示することはできません.継承フォームを表示するには,プロジェクトのソースコード内の,継承元のフォームファイルの場所を変更してください.

plPrevfrm.pas がライブラリパスが通った場所にあれば,継承したフォームが表示できなくても,コンパイルは可能です.



リスト2 
継承フォームを使用したプロジェクトのソースコードの例
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}