円を描く
Delphiでは、単に円をフォームに表示するだけならプログラムを書く必要はありません。Shapeコンポーネントを貼り付けてShapeプロパティをstCircleにすれば円を表示できます。
これでは、簡単すぎて例にならないので、ここではCanvasを使ってフォームに直接、円を描画してみます。CanvasはWindowsのグラフィックス機能をカプセル化したオブジェクトで、フォームのメンバオブジェクトの1つとして用意されています。
この例では、円を描くだけではつまらないので、カラーコモンダイアログを表示して円の色を変更できるようになっています。
カラーダイアログはフォームをクリックすると表示されます。これはOnClickイベントに応答して行っています。円の色を変更するのは、Cnavas.Brush.Colorの値を変更することにより行います。ただし、これだけでは、実際の表示色は変更されないので、フォームのRepaintメソッドによって、新しい色で円を再描画させます。
カラーの初期値はOnCreateイベントに応答して設定しています。
フォームのサイズが変更されらRepaintによって円の大きさもフォームに合わせるようにしています。これは、OnResizeイベントに応答して行います。
ソース(青色の部分が記述した部分です。黒の部分はDelphiが生成した部分です)
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
ColorDialog1: TColorDialog;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormClick(Sender: TObject);
private
{ Private 宣言 }
FColor: TColor;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ 描画要求があったとき }
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Ellipse(2, 2, Height - 30, Height - 30);
end;
{ フォームが作成されたとき }
procedure TForm1.FormCreate(Sender: TObject);
begin
// 円の色の初期値(緑)
Canvas.Brush.Color := $00ff00;
// ウィンドウを正方形にする。
if Width > Height then
Width := Height
else
Height := Width;
end;
{ ウィンドウのサイズが変更されたとき }
procedure TForm1.FormResize(Sender: TObject);
begin
// ウィンドウを正方形にする。
if Width > Height then
Width := Height
else
Height := Width;
// 描画要求
Repaint;
end;
{ クリックされたとき }
procedure TForm1.FormClick(Sender: TObject);
begin
// OKボタンが押されたかチェック
if ColorDialog1.Execute = True then
begin
// 円の色を変更する
Canvas.Brush.Color := ColorDialog1.Color;
Repaint;
end;
end;
end.