|
DelphiXE3 [FMX] 四角形描画 2014/05/17 |
四角形描画(DrawRect)は、キャンバス(Canvas)に 四角形を描画する機能です。
以下、ヘルプより
TCanvas.
DrawRect |
procedure DrawRect(const ARect: TRectF;
const XRadius, YRadius: Single;
const ACorners: TCorners; const AOpacity: Single;
const ACornerType:TCornerType=TCornerType.ctRound);
procedure DrawRect(const ARect: TRectF;
const XRadius, YRadius: Single;
const ACorners: TCorners; const AOpacity: Single;
const ABrush: TStrokeBrush;
const ACornerType:TCornerType=TCornerType.ctRound); |
カスタマイズされた角のrectangleを、現在の TCanvas に描画します。
DrawRect は、カスタマイズされた角の TRectF を、現在の Stroke で描画するよう、TCanvas の子孫で実装されます。
ARect パラメータは、描画される rectangle を示します。
XRadius パラメータは、水平方向での、角からカスタマイズの始点への距離を示します。 XRadius の最大値は、四角形の幅の半分です。 これより大きい場合には、最大値が使用されます。
YRadius パラメータは、垂直方向での、角からカスタマイズの始点への距離を示します。 YRadius の最大値は、四角形の高さの半分です。 これより大きい場合には、最大値が使用されます。
ACorners パラメータは、カスタマイズを適用する角を示します。すべての角にカスタマイズを適用するには、AllCorners 定数を使用します。
AOpacity パラメータは、Stroke 色の透明度を示します。
ACornerType は任意のパラメータで、角のタイプを示します。デフォルトでは、ctRound です。 |
[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 ;
DrawRect(RectF(10,10, 100,100),0,0,AllCorners,1.0);
end;
end; |
保存・ビルド(コンパイル)・実行をすると下図のようになります。
点(10,10)から点(100,100)までを対角点とする、透過率 1.0 (完全不透明状態)で、青色の四角形を描画します。
下記のように、始点・終点に変数を利用する事も可能です。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
r : TRectF ;
begin
r := TRectF.Create(10,10, 100,100);
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawRect(r,0,0,AllCorners,1.0);
end;
end; |
など。
四角形は、直前までに指定した Strokeブラシの状態で描画します。
Stroke.Kind でブラシの種類(色、ビットマップ、グラデーション)、
Stroke.Thickness で線幅、
Stroke.Dash で線種、
Stroke.Cap で線端状態、
Stroke.Join で結合部状態、
を指定します。
例えば下記のようにすると、
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 ;
Stroke.Join := TStrokeJoin.sjBevel ;
DrawRect(RectF(10,10, 140,140),0,0,AllCorners,1.0);
end;
end; |
下図のように描画されます。
第2引数 XRadius、第3引数 YRadius は、四角形のコーナーの大きさを指定します。
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawRect(RectF(10,10, 140,140),10,20,AllCorners,1.0);
end; |
とすると、下図のようになります。
第4引数 ACorners は、どのコーナーに対して コーナー処理を行うのかを指定します。
AllCorners は、TCorners 型の定数で、四角形の 4 つすべての角の集合を定義したものです。
AllCorners は、次の TCorners 値に初期化されます。
[TCorner.crTopLeft, TCorner.crTopRight,
TCorner.crBottomLeft, TCorner.crBottomRight];
AllCorners はコントロールの描画のために使用されます。 |
例えば、上の2つのコーナーのみ処理をしたい場合には、
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawRect(RectF(10,10, 140,140),10,20,
[TCorner.crTopLeft, TCorner.crTopRight],1.0);
end; |
とすると、下図のようになります。
AllCorners を指定すると、4つ全てのコーナー処理を行います。
第5引数 AOpacity で、透過率を指定する事が出来ます。
0.0(完全透明)〜1.0(完全不透明)の範囲内で指定します。
with Canvas do begin
Clear(claWhite);
Stroke.Thickness := 20 ;
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawRect(RectF(10,10, 100,100),5,5,AllCorners,0.5);
Stroke.Color := claRed ;
DrawRect(RectF(50,50, 140,140),10,10,AllCorners,0.5);
end; |
とした場合は、下図のようになります。
第6(第7)引数 ACornerType で コーナー処理の種類を指定する事が出来ます。
TCornerType.ctRound
(デフォルト) | |
TCornerType.ctBevel | |
TCornerType.ctInnerRound | |
TCornerType.ctInnerLine | |
with Canvas do begin
Clear(claWhite);
Stroke.Thickness := 20 ;
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawRect(RectF(30,30, 120,120),15,15,AllCorners,1.0,
TCornerType.ctInnerRound);
end; |
とした場合は、下図のようになります。
第6引数 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 ;
DrawRect(RectF(10,10, 100,100),0,0,AllCorners,1.0, br);
DrawRect(RectF(20,20, 130,130),15,15,AllCorners,0.5,
TCornerType.ctBevel);
end;
br.Free ;
end; |
下図のように描画されます。
なお、キャンバス Canvas の Fill プロパティを指定しても、塗り潰しは行われません。塗り潰しを行いたい場合は、塗り潰しの部分を別途、DrawRect メソッドを実行する直前に FillRect メソッドを利用して描画させて下さい。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/05/16
2014/05/17
▼2014/05/18
シェアウェア
Script!World
データベース
|