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







頁数のプレビューと印刷 ( 先読み方式・複数頁の例 )


先読み方式では,描画が終了するまで総頁数は不明ですが,プレビュー開始時点では PageCount プロパティに総頁数の値が書込まれています.
そこで,このプログラムでは,OnBeforeView イベント内で PageCount プロパティを使用したコードを追加することによって,頁数と頁番号を表示するようにしています.


図1
設計時画面
図2
実行画面
  • 起動時に 3 頁目を表示

リスト1
テストプログラムのコード
unit PageCountUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, plPrev;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    plPrev1: TplPrev;
    procedure BitBtn1Click(Sender: TObject);
    procedure plPrev1BeforeView(Sender: TObject; Page: Integer);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//=============================================================================
//  10頁分を作成して表示
//  ここではテストなのでこのコードを作成する段階で頁数はわかっているが,業務ア
//  プリでは不明なこともある.
//=============================================================================
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LPageStr : string;
  i        : Integer;
begin
  plPrev1.BeginDoc;

  //9回改頁を繰り返す
  i := 1;
  while True do begin
    //頁番号の文字列を作成
    LPageStr := IntToStr(plPrev1.PageNumber) + ' 頁目';

    //文字のサイズ
    plPrev1.FontSize(30);
    //文字列を描画
    plPrev1.TextOut(250, 300, LPageStr);
    plPrev1.TextOut(250, 450, '先読み方式で頁番号を印刷する方法');
    i := i+1;
    if i > 10 then break;

    //改頁
    plPrev1.NewPage;
  end;
  plPrev1.EndDoc;

  //最初は3頁目を表示する
  plPrev1.PageNumber := 3;
  plPrev1.ShowModal;
end;

//=============================================================================
//  TplPrevのOnBeforeViewイベント処理
//
//  OnBeforeViewイベントではCanvasに描画できる
//  (OnBeforeViewイベントは逐次表示方式では無効)
//=============================================================================
procedure TForm1.plPrev1BeforeView(Sender: TObject; Page: Integer);
var
  LPageStr : string;
begin
  //文字のサイズ
  plPrev1.FontSize(100);
  //頁番号の文字列を作成
  LPageStr := IntToStr(Page) + '/' + IntToStr(plPrev1.PageCount);
  //X=105.0mm,Y=260.0mmに位置に文字列を描画
  plPrev1.TextOutCC(1050, 2600, LPageStr);
end;

end.