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






基本的なメソッドです.この他に,追加メソッドとして各種の描画用のルーチンを用意してあります.




描画開始メソッド ( 先読み方式専用 )


BeginDoc

内部変数の初期化や Canvas の作成,メタファイルの初期化を実行します.描画コードを記述する前に必ず実行します.引数はありません.




描画終了メソッド ( 先読み方式専用 )


EndDoc

先読み方式では必ず実行します.このメソッド実行後には描画コードは書けません.




改頁メソッド ( 先読み方式専用 )


NewPage

改頁の処理を行います.先読み方式で 2 頁以上の場合,必ず使用します.






モーダルでプレビュー開始


ShowModal

プレビューフォームをモーダルで表示します.プレビューフォームは ShowModal か Show メソッドを実行しないと表示しません.出力先のプリンタ名に 'Acrobat' という文字が含まれている場合,プレビュー画面を表示しません.代わりに Acrobat による表示となります.このメソッドでプレビューした時は,フォームを閉じるまで次のコードは実行されません.
特別な目的がない限り,この ShowModal を使用して下さい.




モードレスでプレビュー開始 ( 先読み方式専用 )


Show

プレビューフォームをモードレスで表示します.出力先のプリンタ名に 'Acrobat' という文字が含まれている場合,プレビュー画面を表示しません.代わりに Acrobat による表示となります.
このメソッドでプレビューすると,通常のフォームの Show メソッド同様,この次のコードが直ちに実行されます.




指定頁の再描画


Display(Page): Boolean

引数で指定した頁の再描画を実行します.先読み方式では該当頁のメタファイルイメージを表示するだけです.逐次表示方式で,リアルタイムな入力に対応するために用意しました.関数で,表示に失敗するとFalseを返します.

引数 説明
Page Integer 描画または表示する頁番号




プレビューなしで印刷


Print

プレビューをしないで印刷を実行します.PrintFromPage と PrintToPage プロパティで印刷開始と終了頁を指定します.下のコードは,全ての頁を印刷する例です.


リスト1
全ての頁を印刷する例
procedure TForm1.Button2Click(Sender: TObject);
begin
  plPrev1.PrintFromPage := 1;
  plPrev1.PrintToPage   := plPrev1.PageCount;
  plPrev1.Print;
end;




自動拡大縮小印刷のための基準用紙サイズ指定 ( 逐次表示方式のみ )


DesignedPaperSize(W, H)

描画開始前に (BeginDoc の前など),このメソッドで設計時の用紙サイズを指定し,このサイズを基準に描画コードを書きます.すると,プレビューまたは印刷の際には,プリンタ設定コンポーネント,またはプレビューの [プリンタ・用紙] で設定したサイズに拡大縮小してプレビューします.
このメソッドは,帳票は A 版で設計して,印刷の際に B 版.(遠い) 将来 A 版に移行しても,再コンパイルをしなくてもいいようにするために作成したものです (いまだにB版を使用しているところがあるということです).

このメソッドを実行する前に,用紙の設定を実行します.プリンタ設定コンポーネントでの設定でも構いません.このメソッドの引数には,設定した用紙の値を与えます.違う値を与えると正常に機能しない場合があります.

引数 説明
W Integer 設計時の用紙幅
印刷方向が横であっても,poPortrait (縦) の時の値を与える.印刷方向は内部で判定する
H Integer 設計時の用紙高さ
印刷方向が横であっても,poPortrait (縦) の時の値を与える.印刷方向は内部で判定する


リスト2
DesignedPaperSize メソッドの使用例
//=============================================================================
//  DesignedPaperSizeのテストコード
//  設計時のコードはA3横で行い,実際の印刷はA4横で行う
//  オブジェクトインスペクタでの用紙設定はA4横
//
//  一種の拡大・縮小印刷機能
//
//  以下は逐次表示方式の場合のコード
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //逐次表示方式では[プリンタ・用紙]のボタンが使用可能
  plPrev1.BtnOptions := plPrev1.BtnOptions + [boPrinterSetBtn];

  //3頁分
  plPrev1.PageCount := 3;

  //DesignedPaperSizeでA3を指定するのでA3用紙に設定
  plPrev1.plSetPrinter.PaperNumber := DMPAPER_A3;
  //印刷方向は横
  plPrev1.plSetPrinter.Orientation := poLandscape;
  //第1引数は,設定した用紙の横幅,第2引数は縦幅
  //ここではDMPAPER_A3の値
  plPrev1.DesignedPaperSize(2970, 4200);

  plPrev1.ProcName := HogeHoge;

  //プレビュー開始.逐次表示方式にはShowメソッドはない
  plPrev1.ShowModal;
end;


上のコードを実行してプレビュー画面から,プリンタのプロパティダイアログで用紙の設定を確認してみます.下図のように,[用紙サイズ] が A3, 実際の出力用紙のサイズが A4 になります.


図1
プリンタのプロパティで確認
  • 結果的に縮小印刷になっている




プレビューフォームを閉じる


Close

プレビューフォームの [閉じる] ボタン以外で閉じる必要がある場合に使用します.




メタファイルイメージの取得


GetMetaImage(Page): TMetaFile

引数で指定する頁のメタファイルイメージを取得または作成します.

引数 説明
Page Integer 頁番号