AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX] 楕円描画 2014/05/20
 
楕円描画(DrawEllipse)は、キャンバス(Canvas)に 円(全円)・楕円(全楕円)を描画する機能です。
 
以下、ヘルプより
TCanvas.
DrawEllipse
procedure DrawEllipse(const ARect: TRectF;
 const AOpacity: Single);
procedure DrawEllipse(const ARect: TRectF;
 const AOpacity: Single;
 const ABrush: TStrokeBrush);
四角形の境界線で定義される楕円を、現在の TCanvas 上に描画します。
 
四角形の境界線で定義される楕円を、現在の Stroke で描画するには、DrawEllipse を TCanvas の子孫で実装する必要があります。
 
ARect パラメータは、楕円の境界線を定義する構造を示します。
 
AOpacity パラメータは、Stroke 色の透明度を示します。
 
描画ペンをカスタマイズするには、Stroke、StrokeThickness、StrokeCap、StrokeDash、 および StrokeJoin の各プロパティを使用します。
 
[Shapes]内のペイントボックス(PaintBox)を配置し、ClipChildernプロパティを True にしておきます。uses節に「UIConsts」を追記します。

OnPaintイベントハンドラを下記のようにしてみます。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
 with Canvas do begin
  Clear(claWhite);
  Stroke.Kind := TBrushKind.bkSolid ;
  Stroke.Color := claBlue ;
  DrawEllipse(RectF(10,10, 100,100),1.0);
 end;
end;
保存・ビルド(コンパイル)・実行をすると下図のようになります。

点(10,10)から点(100,100)までを対角線とする四角形に内接する、透過率 1.0 (完全不透明状態)で、青色の楕円(この場合は、縦横サイズが同じなので円)を描画します。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
 with Canvas do begin
  Clear(claWhite);
  Stroke.Kind := TBrushKind.bkSolid ;
  Stroke.Color := claBlue ;
  DrawEllipse(RectF(10,10, 140,100),1.0);
 end;
end;
という具合に縦横サイズが異なる場合には、楕円の描画となります。

 

 
楕円は、直前までに指定した Strokeブラシの状態で描画します。
Stroke.Kind でブラシの種類(色、ビットマップ、グラデーション)、
Stroke.Thickness で線幅、
Stroke.Dash で線種、
Stroke.Cap で線端状態、
を指定します。
 
例えば下記のようにすると、
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
 with Canvas do begin
  Clear(claWhite);
  Stroke.Kind := TBrushKind.bkGradient ;
  Stroke.Gradient.Color := claRed ;
  Stroke.Gradient.Color1 := claYellow ;
  Stroke.Thickness := 20 ;
  Stroke.Dash := TStrokeDash.sdDash ;
  Stroke.Cap := TStrokeCap.scRound ;
  DrawEllipse(RectF(10,10, 140,100),1.0);
 end;
end;
下図のように描画されます。

 
 
第2引数 AOpacity で、透過率を指定する事が出来ます。
0.0(完全透明)〜1.0(完全不透明)の範囲内で指定します。
with Canvas do begin
 Clear(claWhite);
 Stroke.Thickness := 20 ;
 Stroke.Kind := TBrushKind.bkSolid ;
 Stroke.Color := claBlue ;
 DrawEllipse(RectF(10,10, 100,80),0.5);
 Stroke.Color := claRed ;
 DrawEllipse(RectF(40,40, 140,140),0.5);
end;
とした場合は、下図のようになります。

 
 
第3引数 ABrush でブラシを指定する記述方法もあります。
この場合は、直前で指定した Canvas の Strokeプロパティ内容ではなく、この引数の内容で楕円描画が行われます。
 
例えば、下記のように記述すると
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
 br : TStrokeBrush ;
begin
 br := TStrokeBrush.Create(TBrushKind.bkSolid,claBlue) ;
 br.Thickness := 10 ;
 with Canvas do begin
  Clear(claWhite);
  Stroke.Kind := TBrushKind.bkGradient ;
  Stroke.Gradient.Color := claRed ;
  Stroke.Gradient.Color1 := claYellow ;
  Stroke.Thickness := 20 ;
  Stroke.Dash := TStrokeDash.sdDash ;
  Stroke.Cap := TStrokeCap.scRound ;
  DrawEllipse(RectF(10,10, 120,80),1.0, br);
  DrawEllipse(RectF(20,20, 130,130),0.5);
 end;
 br.Free ;
end;
下図のように描画されます。

 
 
なお、キャンバス Canvas の Fill プロパティを指定しても、塗り潰しは行われません。塗り潰しを行いたい場合は、塗り潰しの部分を別途、DrawEllipse メソッドを実行する直前に FillEllipse メソッドを利用して描画させて下さい。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/05/19
 2014/05/20
▼2014/05/21
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.