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







イメージ ( 画像 ) の描画 ( 逐次表示方式 )


イメージの読込みで説明しているメソッドのテストプログラムです.また,OnAfterView イベントを利用して,プレビュー画面のステータスバーに説明を表示しています.このプログラムでは,プレビューフォームの継承フォームを2つ作成し,各々別の印刷プレビューコンポーネント使用してプレビューしています.プリンタの設定は,各々のコンポーネントの設定内容となります.


図1
設計時画面
  • 印刷プレビューコンポを2つ
  • プリンタの設定は各々独立して設定可能
図2
ボタン 1 の実行画面
  • 継承プレビューフォームの直接操作でデザインを変更している
図3
ボタン 2 の実行画面
  • メソッド DrawPict, StretchDrawPict で描画
  • ボタンを Flat にしてみた

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

interface

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

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

var
  Form1: TForm1;

implementation

uses
  jpeg,
  Unit1,
  Unit2,
  Printers;

{$R *.DFM}

//=============================================================================
//  BitBtn1をクリックするとCanvasへ描画して印刷プレビュー
//  逐次表示方式
//=============================================================================
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  plPrev1.PageCount := 1;                 //1頁だけの時は不要
  plPrev1.FormName  := 'plPrevForm1';     //プレビューplPrevForm1を使用
  plPrev1.ProcName  := BitMapDrawTest1;   //描画用の手続きを指定
  plPrev1.ShowModal;                      //プレビュー開始
end;

//=============================================================================
//  BitBtn2をクリックするとCanvasへ描画して印刷プレビュー
//  逐次表示方式
//
//  描画の方法を変えて3頁表示
//=============================================================================
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  plPrev2.PageCount  := 3;
  plPrev2.FormName   := 'plPrevForm2';   //プレビューplPrevForm2を使用
  plPrev2.ProcName   := BitMapDrawTest2; //描画用の手続きを指定
  plPrev2.ShowModal;                     //プレビュー開始
end;

//-----------------------------------------------------------------------------
//  Canvasプロパティを使用してStrechDrawする例
//
//  JPEG画像を0.1mmを1ドットとした普通(?)の描画と,指定
//  した四角形の中に収めるストレッチ形式での描画
//-----------------------------------------------------------------------------
procedure TForm1.BitMapDrawTest1;
var
  LJPEG : TJPEGImage;
begin
  LJPEG := TJPEGImage.Create;
  try
    LJPEG.LoadFromFile('ChestCT.jpg');
    plPrev1.Canvas.Draw(500, 200, LJPEG);
    plPrev1.Canvas.StretchDraw(Rect(500, 900, 1500, 2300), LJPEG);
  finally
    FreeAndNil(LJPEG);
  end;
end;

//-----------------------------------------------------------------------------
//  JPEG画像を指定した枠(四角形)に収めて描画
//  コンポ内のDrawPictとStrechDrawPictを使用した例
//
//  逐次表示方式では、頁番号を示すプロパティPageNumberを用いて表示する頁に応じ
//  た処理を描画ルーチンに記述する.
//  描画する頁数が1頁のみの時は頁番号による分岐は不要.
//
//  1頁目 枠内全体に描画する.元の縦横比は変わる
//  2頁目 元の画像よりも縦長の枠内に描画する場合
//        横方向を枠の幅に合わて描画.縦横比は不変          
//  3頁目 元の画像よりも横長の枠内に描画する場合
//        縦方向を枠の長さに合わせて描画.縦横比は不変
//-----------------------------------------------------------------------------
procedure TForm1.BitMapDrawTest2;
var
  LText     : string;
  LFileName : string;
begin
  LText := '印刷テスト';
  plPrev2.Title := '印刷プレビューコンポの描画メソッド使用';
  LFileName := 'ChestCT.jpg';

  //PageNumberの値はプレビューの頁送りボタンで変わる
  case plPrev2.PageNumber of
    1:
    begin
      plPrev2.DrawPict       (500,  200, LFileName);
      plPrev2.StretchDrawPict(500, 1500, 900, 2300,True, LFileName);
      plPrev2.RectLine       (500, 1500, 900, 2300);
    end;
    2:
    begin
      plPrev2.DrawPict       (500,  200, LFileName);
      plPrev2.StretchDrawPict(500, 1500, 900, 2300,False, LFileName);
      plPrev2.RectLine       (500, 1500, 900, 2300);
    end;
    3:
    begin
      plPrev2.DrawPict       (500,  200, LFileName);
      plPrev2.StretchDrawPict(300, 1800, 1100, 2000,False, LFileName);
      plPrev2.RectLine       (300, 1800, 1100, 2000);
    end;
  end;
end;

//=============================================================================
//  plPrev2のOnAfterViewイベント処理
//  頁を表示したらステータスバーに説明を表示
//=============================================================================
procedure TForm1.plPrev2AfterView(Sender: TObject; Page: Integer);
begin
  case Page of
  1: plPrev2.StatusBarText :=
             ' 指定枠に全体に描画.本来の縦横比は変化する';
  2: plPrev2.StatusBarText :=
             ' 縦横比はそのままで,横方向を枠の幅に合せて描画';
  3: plPrev2.StatusBarText :=
             ' 縦横比はそのままで,縦方向を枠の長さに合せて描画';
  end;
end;

end.