object pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 a6 - 6...

24
岡本安晴 2000.12.28;2001.3.4 A6 - 1 Object Pascal 入門 付録6 グラフィック描画・プリンタへの描画 A6-1 グラフィック描画 A6-2 プリンタへの描画(Printer オブジェクト)

Upload: nguyenngoc

Post on 28-Apr-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 1

Object Pascal 入門

付録6

グラフィック描画・プリンタへの描画

A6-1 グラフィック描画

A6-2 プリンタへの描画(Printer オブジェクト)

Page 2: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 2

A6 グラフィック描画・プリンタへの描画

計算結果をグラフとして表示する。あるいは、シミュレーションの過程を図示する。これ

らの描画により、データ分析の結果、あるいは現象のメカニズムや予測の理解が直感的に

容易に行えるようになる。Delphi では、描画も Canvas プロパティを利用すると簡単に行

うことができる。まず、ディスプレイ上での描画であるグラフィック描画について説明す

る。

A6-1 グラフィック描画

A6-1.1 描画の基本

ディスプレイ上でのグラフィック描画は、Canvasプロパティを利用する。Canvasプロパテ

ィは、フォーム、あるいはフォームに貼り付けた Image コンポーネントなどに用意されて

いる。Canvas プロパティ自体、TCanvas というクラス型のオブジェクトである。描画は、

TCanvas のメソッドあるいはプロパティを利用して行う。例えば、座標(X1,Y1)から座標

(X2,Y2)まで直線を引くときは、MoveTo メソッドによってペンの位置を(X1,Y1)に移動して

から、LineToメソッドによってペンを(X2,Y2)まで移動させる。すなわち、

MoveTo(X1,Y1);

LineTo(X2,Y2);

というようにする。MoveToによるペンの移動では線は描かれないが、LineToによるペンの

移動のときは始点から終点まで線が引かれる。これらのメソッドはオブジェクト Canvasの

コンポーネントであり、Canvas はフォームなどのコンポーネントである。フォームのメソ

ッド内において上の文を実行するときは、フォームのプロパティ Canvasはそのメソッド内

で有効であるので Canvas プロパティからの限定でよく、

Canvas.MoveTo(X1,Y1);

Canvas.LineTo(X2,Y2);

と書けばよい。With 文を用いると

with Canvas do begin

MoveTo(X1,Y1); LineTo(X2,Y2);

end;

Page 3: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 3

となる。

描画画面のサイズは、フォームコンポーネントあるいはイメージコンポーネントのサイ

ズである。座標は、横座標が第 1 座標、縦座標が第 2 座標で与えられる。左上隅が(0,0)で、

第 1 座標は右方向に増加し、第 2 座標は下方向に増加する。座標値は、ピクセルを単位と

する整数値である。1ピクセルは、ディスプレイ画面上の1ドットに対応する。有効な横

方向の最大長(幅)および縦方向の最大長(高さ)は、プロパティ ClientWidth および

ClientHeight で与えられる。

従って、フォームの中央に 1 辺の長さ100ピクセルの正方形を描くときは、次のよう

になる。

with Canvas do

begin

x0:=ClientWidth div 2;

y0:=ClientHeight div 2;

MoveTo(x0-50,y0-50);

LineTo(x0+50,y0-50);

LineTo(x0+50,y0+50);

LineTo(x0-50,y0+50);

LineTo(x0-50,y0-50);

end;

上の実行によって、下図のように正方形が描画される。

Page 4: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 4

サンプルプログラム PSamplea61.dprでは、上の描画はフォームのクリックで呼び出され

るメソッド(イベントハンドラ)TForm1.FormMouseUpによって実行されている。

イベントハンドラ FormMouseUp は、オブジェクトインスペクタにおけるイベントページに

おいて、OnMouseUp 欄の右空白セルをダブルクリックするとユニットに自動的に挿入される。

下図は、ダブルクリックによって挿入されたエディタの画面である。

Page 5: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 5

このメソッド FormMouseUp は、フォーム上でクリックしたマウスボタンを離したときに呼

び出されるものである。

上の画面にコードを書き加えて、以下のようにする。

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var x0, y0 : Longint;

begin

if Button = mbRight

then Close

else

with Canvas do

begin

x0:=ClientWidth div 2;

y0:=ClientHeight div 2;

MoveTo(x0-50,y0-50);

LineTo(x0+50,y0-50);

LineTo(x0+50,y0+50);

LineTo(x0-50,y0+50);

LineTo(x0-50,y0-50);

end;

end;

メソッド FormMouseUp の第2パラメータ Buttonには、クリックされたボタンの種類が設定

される。右ボタンがクリックされたときは、mbRight が設定されている。上のコードでは、

右ボタンがクリックされたときは Close が実行されプログラムの終了となる。右ボタン以

外がクリックされたときは、フォームに正方形が描かれる。

Page 6: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 6

メソッド Rectangle

正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。

Rectangle のヘッダーは、次のようになっている。

procedure Rectangle(X1, Y1, X2, Y2: Integer);

点(X1,Y1)が長方形の左上角、点(X2,Y2)が右下角の位置を示す。これら2点によって決ま

る長方形が描画される。

長方形の外枠は Penプロパティに従い、内部は Brushプロパティに従って描画される。

プロパティ Pen

Pen プロパティはクラス型 TPen を型とするものであり、プロパティ Color、Style、Width

などのプロパティがある。

プロパティ Color

Color プロパティは TColor 型であり、定数として以下のものなどが用意されている。

TColor 型の定数

clAqua 空色 clBlue 青色 clFuchsia 赤紫色 clGreen 緑色 clLtGray 灰色(明) clNavy 濃紺色 clPurple 紫色 clSilver 銀色 clWhite 白色

clBlack 黒色 clDkGray 灰色(暗) clGray 灰色 clLime 濃緑色 clMaroon 栗色 clOlive 黄緑色 clRed 赤色 clTeal 暗青緑色 clYellow 黄色

色の値を3色(赤、青、緑)の加色混合として与えるものに RGB 関数がある。ヘッダー

は、次のようになっている

function RGB(r, g, b: Byte): COLORREF;

パラメータ r、g、b に赤、青、緑のそれぞれの強さを0~255の範囲の整数値で設定す

ると、指定した3色の加色混合の色が与えられる。関数 RGBの戻り値の型 COLORREFおよび

Page 7: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 7

色の値の型 TCOLORは、ともに整数型であり互換性がある。

プロパティ Style

プロパティ Style の値として、次のようなものがある。

Pen.Style の値

psSolid 実線 psDot 点線 psDashDotDot 二点鎖線

psDash 破線 psDashDot 一点鎖線 psClear 線は描画されない

ただし、width プロパティが 1 でないときは、 psDot あるいは psDash は使えない。

プロパティ width は線の太さを整数値で設定する。

プロパティ Brush

Brush プロパティは TBrush 型のオブジェクトであり、Bitmap、Color、Styleなどのプロパ

ティがある。プロパティ Bitmapは、ビットマップで模様を与えるものである。Color は色

の設定に用いる。Style プロパティは、bsSolid, bsClear, bsHorizontal, bsVertical,

bsFDiagonal, bsBDiagonal, bsCross, bsDiagCrossのいずれかの値をとる。bsSolidは塗り潰

しであり、bsClearのときは Brush による描画はない。

メソッド Ellipse

楕円を描く手続きとして Ellipseがある。ヘッダーは

procedure Ellipse(X1, Y1, X2, Y2: Integer);

となっている。点(X1,Y1)を左上角、点(X2,Y2)を右下角とする長方形に内接する楕円を描

く。長方形が正方形のときは、内接円となる。楕円が Pen のプロパティによって描かれ、

その内部が Brush のプロパティに従って塗り潰される。

次のプログラムは、18色の色定数によって半径の異なる同心円を大きいものから順番

に描くものである。

with Canvas do

begin

// フォーム全体を白で塗り潰す

Pen.Color:=clWhite;

Brush.Color:=clWhite;

Rectangle(0,0,ClientWidth,ClientHeight);

Page 8: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 8

// (x0,y0):フォームの中心

x0:=ClientWidth div 2;

y0:=ClientHeight div 2;

for i:=1 to 18 do

begin

case i of

1 : clv:=clAqua; // 空色

2 : clv:=clBlue; // 青色

3 : clv:=clFuchsia; // 赤紫色

4 : clv:=clGreen; // 緑色

5 : clv:=clLtGray; // 灰色(明)

6 : clv:=clNavy; // 濃紺色

7 : clv:=clPurple; // 紫色

8 : clv:=clSilver; // 銀色

9 : clv:=clWhite; // 白色

10 : clv:=clBlack; // 黒色

11 : clv:=clDkGray; // 灰色(暗)

12 : clv:=clGray; // 灰色

13 : clv:=clLime; // 濃緑色

14 : clv:=clMaroon; // 栗色

15 : clv:=clOlive; // 黄緑色

16 : clv:=clRed; // 赤色

17 : clv:=clTeal; // 暗青緑色

else clv:=clYellow; // 黄色

end;

Pen.Color:=clv;

Brush.Color:=clv;

s:=Round(y0*(20-i)/20); // 円の半径

Ellipse(x0-s,y0-s,x0+s,y0+s);

end;

end;

上のプログラムによって、下図のような同心円が描かれる。

Page 9: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 9

上図は、サンプルプログラムPSamplea62.dprの実行によって描かれている。PSamplea62.dpr

では、フォームのクリックによって実行されるメソッド TForm1.FormMouseUp(厳密には、

ボタンをクリックして離したときに実行される)において、左ボタンがクリックされてい

るとき上図の描画が行われ、右ボタンによるクリックのときはプログラムの実行終了とな

る(正方形の描画を行う PSamplea61.dpr の説明、A6-5 ページ、を参照)。

Canvas のメソッドとプロパティ

Canvasには、Rectangle や Ellipseなどのメソッド、Pen や Brush などのプロパティと

描画に関係した多くのコンポーネントが用意されている。その一部と簡単な説明を以下に

挙げておく。詳しくは Delphi のオンラインヘルプなどを参照のこと。

Page 10: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 10

Canvas のメソッド

procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

楕円状に曲がった曲線を描く

procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

楕円状に沿った弓形を描く

procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);

Canvas のイメージの一部を別の Canvas にコピーする

procedure Draw(X, Y: Integer; Graphic: TGraphic); ビットマップ、アイコン、メタファイルのいずれかのグラフィックを Canvas に描く

procedure Ellipse(X1, Y1, X2, Y2: Integer);

楕円を描く

procedure FillRect(const Rect: TRect);

Brush の値によって四角形の領域を塗り潰す。

procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);

Brush の値によって領域を塗り潰す

Page 11: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 11

procedure LineTo(X, Y: Integer);

PenPos プロパティで与えられる現在のペンの位置から点(X,Y)まで直線を引く。直線を引いた後の PenPos の値は(X,Y)となる

procedure MoveTo(X, Y: Integer);

PenPos の値を(X,Y)とする

procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);

扇形を描画する

procedure PolyBezier(const Points: array of TPoint);

ベジェ曲線を描く

procedure PolyBezier(const Points: array of TPoint);

ベジェ曲線を描き、PenPos の値を最後のエンドポイントの位置とする

procedure Polygon(Points: array of TPoint);

Pen の値によって閉じた多角形を描き、内部を Brush の値で塗り潰す

procedure Polyline(Points: array of TPoint);

連続する点を結ぶ

Page 12: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 12

procedure Rectangle(X1, Y1, X2, Y2: Integer);

長方形を描く

procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);

角の丸い長方形を描く

procedure StretchDraw(const Rect: TRect; Graphic: TGraphic );

ビットマップ、アイコン、メタファイルのいずれかのグラフィックを指定した四角形に収まるように描画する

function TextExtent(const Text: string): TSize;

Canvas に Text の内容を描いた場合の幅と高さを返す

function TextHeight(const Text: string): Integer;

Canvas に Text の内容を描いた場合の高さを返す

procedure TextOut(X, Y: Integer; const Text: string);

Canvas 上の位置(X,Y)から Text の内容を書き出す

procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string); 指定された四角形の領域内に Text の内容を書き出す。四角形の外にはみ出した部分は表示されない

Page 13: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 13

function TextWidth(const Text: string): Integer;

Canvas に Text の内容を描いた場合の幅を返す

Page 14: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 14

Canvas のプロパティ

Brush

背景の描画や塗り潰しに使う色と模様を指定する

CopyMode

CopyRect によってイメージをコピーするときの方法を指定する

Font

テキストを書くときのフォントを指定する

Pen

ペンを指定する

PenPos

ペンの現在位置を示す

Pixels

Canvas 上のピクセル位置の色を示す

TextFlags

テキストの描画方法を指定する

Page 15: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 15

A6-1.2 大きな絵の描画

フォームより大きい図を描くと、フォームからはみ出した部分は描画されない。

上図は、次のプログラムによってフォームより大きい楕円を描いたものである。

with Canvas do

begin

Pen.Color:=clRed;

Brush.Color:=clGreen;

Ellipse(0,0,2*ClientWidth,2*ClientHeight);

end;

この描画は、サンプルプログラム PSamplea63.dprによって実行されている。フォームの左

ボタンによるクリックで描画が行われ、右ボタンによるクリックでプログラムの実行終了

となる。

フォームに Image コンポーネントを貼り付けると、フォームより大きい図を描くことが

できる。サンプルプログラム PSamplea64.dpr では、プログラムの起動時に呼び出される

TForm1.FormActivate メソッドによって、フォームに貼り付けた Imageコンポーネントをフ

ォームの2倍のサイズに拡大している。すなわち、

procedure TForm1.FormActivate(Sender: TObject);

begin

with Image1 do

begin

Page 16: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 16

Top:=0; Left:=0;

Width:=Form1.ClientWidth*2;

Height:=Form1.ClientHeight*2;

UpDate;

end;

end;

上のメソッドの実行により、プログラムの実行開始時のフォームは次のようになっている。

Image コンポーネントのサイズがフォームより大きいので、フォームにスクロールバーが表

示されている。これらのスクロールバーをスライドすることによって、フォーム上に表示

されるImageコンポーネントの部分を移動することができる。プログラミング時には、Image

コンポーネントはフォームに下図のように貼り付けられている。

このとき、Image コンポーネントはフォーム内に収まっているので、スクロールバーは表示

されていない。

Image コンポーネントは、コンポーネントパレットの Additionalページにある。

Page 17: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 17

PSamplea64.dpr の実行開始時のフォームをマウスの左ボタンでクリックする(実際は、

フォーム全体を Image コンポーネントが占めているので Image コンポーネントのクリック

となる)と、下図のように描画が行われる。

スクロールバーを動かすと、Image コンポーネントに描かれている別の部分が表示される。

サンプルプログラム PSamplea64.dprでは、Image コンポーネントのクリックによって呼

Page 18: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 18

び出されるメソッドが次のように用意されている

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if Button = mbRight

then Close

else

with Image1.Canvas do

begin

Pen.Color:=clRed;

Brush.Color:=clGreen;

Ellipse(0,0,Image1.Width,Image1.Height);

end;

end;

このメソッドは、以下の操作でプログラミング時に Delphi によってエディタ内に自動的

に挿入される。すなわち、フォーム上の Image コンポーネントをクリックしてアクティブ

にする。Image コンポーネントの Image1 をクリックしてアクティブにすると、オブジェク

トインスペクタは Image1 を表示する。

このときイベントページの OnMouseUp 欄の右側のセルをダブルクリックすると、

Image1MouseUp メソッドがエディタ画面内に挿入される。このメソッドは、マウスのボタン

をクリックして離したときに呼び出されるものである。メソッドの詳しい説明は、オブジ

Page 19: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 19

ェクトインスペクタの OnMouseUp 欄をクリックしてから「F1」キーをクリックするとオン

ラインヘルプが表示されるので、それを参照のこと。

サンプルプログラム PSamplea64.dpr の場合も、フォーム上、すなわち Image コンポーネ

ントを右ボタンでクリックするとプログラムの実行終了となる。

Page 20: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 20

A6-2 プリンタへの描画(Printer オブジェクト)

プリンタへの描画(プロッタ出力)は、オブジェクト Printerの Canvasへの描画として行

う。オブジェクト Printerを使用するときは、ユニット Printersの使用の宣言が必要であ

る。すなわち、

uses Printers;

と宣言しておいて、オブジェクト Printer を用いる。オブジェクト Printer は、Printers

ユニットによって自動的に用意される(Printerの呼び出し時に生成される)ので、プログ

ラムでの使用前に生成する必要はない。

次のプログラムは、プリンタ用紙のページサイズ一杯に楕円を描くものである。

with Printer do

begin

BeginDoc;

with Canvas do

begin

Ellipse(0,0,PageWidth, PageHeight);

end;

EndDoc;

end;

Printer のメソッド BeginDoc の実行でプリンタへの出力ジョブが始まり、EndDoc の実行

で出力ジョブは終了する。描画は、BeginDocと EndDocの間で行う。上の例では、楕円を描

くメソッド Ellipse が実行されている。プロパティ PageWidthと PageHeightは、印刷有効

範囲の幅と高さを与えるものである。

サンプルプログラム PSamplea65.dprは、上の描画を実行するものである。

プリンタへの出力時の用紙の方向(縦あるいは横)などは、PrintDialogコンポーネント

を利用すると、プログラムの実行時に設定することができる。

Page 21: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 21

PrintDialog コンポーネントは、コンポーネントパレットの Dialogsページに用意されて

いる。PrintDialog コンポーネントの executeメソッド(関数)を実行すると、下図のダイ

アログボックスが表示される。

上図のダイアログボックスにおいて「プロパティ」ボタンをクリックすると、下図のよ

うにプリンタ設定用のダイアログボックスが表示される。

Page 22: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 22

上図の場合、用紙設定ページで印刷方向などが設定できる。

次のプログラムは、用紙の中央に「印刷」とプリントするものである。

with PrintDialog1 do

begin

if not Execute then exit;

end;

with Printer do

begin

BeginDoc;

with Canvas do

begin

FontDialog1.Execute;

Font:=FontDialog1.Font;

s:='印刷';

TextOut( (PageWidth-TextWidth(s)) div 2,

(PageHeight-TextHeight(s)) div 2,

s );

Page 23: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 23

end;

EndDoc;

end;

PrintDialogコンポーネントによってプリンタの設定を行い、FontDialogコンポーネントに

よって、Canvasにおいて文字を出力するときの Fontの設定を行っている。

Font:=FontDialog1.Font;

において、左辺の Fontは with文によって Canvas.Fontを表す。FontDialog コンポーネン

トは、コンポーネントパレットの Dialogsページにある。

サンプルプログラム PSamplea66.dprは、上のプログラムを実行するものである。

Page 24: Object Pascal 入門mcn-yokamoto/openwww/objpaspdf/manua6.pdf岡本安晴2000.12.28;2001.3.4 A6 - 6 メソッドRectangle 正方形は長方形の特別な場合であるが、長方形を描くメソッドとしてRectangleがある。Rectangleのヘッダーは、次のようになっている。

岡本安晴 2000.12.28;2001.3.4

A6 - 24

参考文献

(1) Delphi 5オンラインヘルプ、Inprise Corporation, 1999.

(2) Delphi 5 Object Pascal 言語ガイド、インプライズ株式会社、1999.

(3) 岡本安晴「Delphi プログラミング入門」、CQ 出版社、1997.