前節までの学習で、(Canvas プロパティ上の) Pixels プロパティに任意の色を指定する事で原理的にはどのような図形でも描けることが分かったと思います。しかし、【応用問題 7-3-A】をプログラミングした人は気づいたと思いますが、斜線を引くことは少し面倒ですね。
実は、Canvas プロパティには MoveTo および LineTo というメソッドが定義されており、これを用いれば任意の直線を簡単に描くことができます。
Canvas プロパティには仮想のペンがあります。このペンは、プログラム開始時には 原点 (0, 0) にいて、LineTo 命令なら線を描きながら指定の場所へ、MoveTo なら線を描かずに (空中を通って) 指定の場所へと移動します。
【基礎課題 7-3-1】を MoveTo および LineTo メソッドを用いて書き直すと次のようになります。
void __fastcall TForm1::ButtonDrawClick(TObject *Sender)
{
int Nagasa;
Nagasa = 30;
ImageField->Canvas->Pen->Color = clRed;
ImageField->Canvas->MoveTo(10, 20);
ImageField->Canvas->LineTo(10 + Nagasa, 20);
}
procedure TForm1.ButtonDrawClick(Sender: TObject);
var
Nagasa: Integer;
begin
Nagasa := 30;
ImageField.Canvas.Pen.Color := clRed;
ImageField.Canvas.MoveTo(10, 20);
ImageField.Canvas.LineTo(10 + Nagasa, 20);
end;
■JBuilder code■
■VB code■
■VBA code■
描画する線の色は、Pen というプロパティにある Color プロパティに指定します。まさに使用する Pen の色を指定している訳です。
作成したら、各自動作を確認してください。この用例をみれば MoveTo および LineTo メソッドの用法は理解できると思います。
今、点 (x1, y1) と点 (x2, y2) を結ぶ直線を、TColor 型変数 cl で与えられる色で描く手続き Line(x1, y1, x2, y2, cl) を定義しましょう。すると上の【練習問題】のプログラムは次のようになります。
void __fastcall TForm1::ButtonDrawClick(TObject *Sender)
{
int Nagasa;
Nagasa = 30;
Line(10, 20, 10 + Nagasa, 20, clRed);
}
procedure TForm1.ButtonDrawClick(Sender: TObject);
var
Nagasa: Integer;
begin
Nagasa := 30;
Line(10, 20, 10 + Nagasa, 20, clRed);
end;
■JBuilder code■
■VB code■
■VBA code■
このとき、手続き Line の定義はどのようになるでしょうか? 下の下線部を埋めてプログラムを完成させてください。
void TForm1::Line(int x1, int y1, int x2, int y2, TColor cl)
{
}
procedure TForm1.Line(x1:Integer; y1:Integer; x2:Integer; y2:Integer; cl:TColor);
begin
end;
■JBuilder code■
■VB code■
■VBA code■
【基礎課題 7-4-1】で定義した手続き Line を利用して、下のように描画ボタンを押すとアルファベットの T を描くプログラムを作成してください。