delphi.gif (306 バイト) 円を描く


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.