Delphi Programming / Object Pascal
[掲載 2000年12月12日] [更新 2016年04月19日] 印刷プレビュー制御コンポーネント
印刷プレビュー制御コンポーネント
使用方法 ( 逐次表示方式 )
動作確認等
Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成
この印刷プレビュー制御コンポーネントを利用するには,Delphi の TPrinter オブジェクト (クラス) を使用して,プリンタに出力,つまり印刷する基本的な方法を知っている必要があります.
この印刷プレビューコンポーネント TplPrve は,拙作のプリンタ設定コンポーネント TplSetPrinter を使用します.プリンタ設定コンポーネントの説明も参考にしてください.
逐次表示方式は,プレビュー画面で頁送りを行った時に,その頁のメタファイルを作成しながら描画します.したがって,複雑な描画コードの場合は,頁送りに時間がかかりますが,プレビュー画面に入力用のコントロールを配置し,その入力を直ちにプレビューに反映することが可能です.
単票形式の印刷
1 頁が 1 レコードに相当するクエリーの結果の印刷
等の用途に向いています.逐次表示方式では,BeginDoc ~,EndDoc メソッドは使用しません.かわりに描画用のメソッドを利用者が作成して,そのメソッド内に描画コードを記述します.このメソッドは引数なしのクラスメソッドしか使えません.
プリンタの設定は,実行時にも同じプリンタと同じドライバが存在すれば,その設定を再現することができます.
図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 宣言 }
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 のパスを,自分の開発環境に合わせて変更する
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}