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 にしてみた
|
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.
|