|
DelphiXE3 [FMX] 直線描画 2014/05/16 |
直線描画(DrawLine)は、キャンバス(Canvas)に 直線を描画する機能です。
以下、ヘルプより
TCanvas.
DrawLine |
procedure DrawLine(const APt1, APt2: TPointF;
const AOpacity:Single);
procedure DrawLine(const APt1, APt2: TPointF;
const AOpacity:Single; const ABrush: TStrokeBrush); |
2つの点で定義される線を、現在の TCanvas 上に描画します。
2つのpointsで定義される線を、現在の Stroke で描画するには、DrawLine を TCanvas の子孫で実装する必要があります。
APt1 および APt2 パラメータは、2 つの TPointF 値です。これらのパラメータは、描画する線の終点を示します。
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 ;
DrawLine(PointF(10,10),PointF(100,100), 1.0);
end;
end; |
保存・ビルド(コンパイル)・実行をすると下図のようになります。
点(10,10)から点(100,100)まで、透過率 1.0 (完全不透明状態)で、青色の直線を描画します。
下記のように、始点・終点に変数を利用する事も可能です。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
p1,p2 : TPointF ;
begin
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
p1 := PointF(10,10) ;
p2 := PointF(100,100) ;
DrawLine(p1,p2, 1.0);
end;
end; |
又は
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
p1,p2 : TPointF ;
begin
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
p1.X := 10 ;
p1.Y := 10 ;
p2.X := 100 ;
p2.Y := 100 ;
DrawLine(p1,p2, 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 ;
DrawLine(PointF(10,10),PointF(140,140), 1.0);
end;
end; |
下図のように描画されます。
第3引数で、透過率を指定する事が出来ます。
0.0(完全透明)〜1.0(完全不透明)の範囲内で指定します。
上記で
DrawLine(PointF(0,150),PointF(150,0), 0.5);
DrawLine(PointF(0,0),PointF(150,150), 0.5); |
とした場合は、下図のようになります。
ClipChildernプロパティを True にしていますので、描画はペイントボックスの範囲内でクリップされて、その外側にははみ出ません。デフォルトは False となっていますので、デフォルト状態だとクリップされず外側にはみ出て描画されますから注意が必要です。
第4引数でブラシを指定する記述方法もあります。
この場合は、直前で指定した Canvas の Strokeプロパティ内容ではなく、この第4引数の内容で直線描画が行われます。
例えば、下記のように記述すると
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 ;
DrawLine(PointF(0,50),PointF(150,80), 1.0, br);
DrawLine(PointF(0,150),PointF(150,0), 0.5);
DrawLine(PointF(0,0),PointF(150,150), 0.5);
end;
br.Free ;
end; |
下図のように描画されます。
なお、OnPaintイベントハンドラではなく、例えば、ボタンを配置して、ボタンをクリックしたら描画を行う、という風にしたい場合には、キャンバスへの指定の前後に BeginScene 〜 EndScene を入れてコードを囲ってあげる必要があります。
procedure TForm1.Button1Click(Sender: TObject);
begin
with PaintBox1.Canvas do begin
BeginScene ;
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claGreen ;
Stroke.Thickness := 5 ;
Stroke.Dash := TStrokeDash.sdSolid ;
Stroke.Cap := TStrokeCap.scFlat ;
DrawLine(PointF(0,0),PointF(150,150), 1.0);
EndScene ;
end;
end; |
保存・ビルド(コンパイル)・実行をすると、下図のようになります。
ボタンをクリック
↓
というように、OnPaintイベントハンドラ以外で記述をすると、ペイントボックスの位置を無視して、フォーム画面のクライアント領域上での座標指定となり、ペイントボックスの ClipChildernプロパティ内容は無視されますので注意が必要です。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/05/15
2014/05/16
▼2014/05/17
シェアウェア
Script!World
データベース
|