私のプログラムでは、棒グラフは使っていますので、
brush.colorとかrectungleとで色は簡単につけれますが、
円グラフはどうやって色を付けるのか教えてください。
昔のBASICでは、閉じられた平面の中の一点を指定したら
その平面に色を付けれましたよね。そんな方法はありますか??
Canvas.FloodFill関数の第4引数で「fsBorder」を指定すれば境界線の内側領域を塗り潰せます。
https://mam-mam.net/delphi/vcl_canvas_floodfill.html
ちなみに円グラフを描画するなら、Pieを使えばFloodFill関数を使う必要が無いです。
procedure TForm1.Button1Click(Sender: TObject);
var v:array[0..2] of integer;
c:array[0..2] of TColor;
i:Integer;
s,ss:Integer;
w,h:Integer;
x1,y1,x2,y2:Integer;
begin
v[0]:=180;
c[0]:=rgb(255,0,0);
v[1]:=135;
c[1]:=rgb(0,255,0);
v[2]:=45;
c[2]:=rgb(0,0,255);
s:=0;
for i := Low(v) to High(v) do
s:=s+v[i];
w:=200;
h:=200;
Image1.Picture.Bitmap.Width:=w;
Image1.Picture.Bitmap.Height:=h;
Image1.Picture.Bitmap.Canvas.Brush.Style:=bsSolid;
Image1.Picture.Bitmap.Canvas.Pen.Style:=psClear;
ss:=0;
for i := Low(v) to High(v) do
begin
Image1.Picture.Bitmap.Canvas.Brush.Color:=c[i];
x1:=trunc(w/2-cos(ss/s*Pi*2+Pi/2)*w/2);
y1:=trunc(h/2-sin(ss/s*Pi*2+Pi/2)*h/2);
x2:=trunc(w/2-cos((ss+v[i])/s*Pi*2+Pi/2)*w/2);
y2:=trunc(h/2-sin((ss+v[i])/s*Pi*2+Pi/2)*h/2);
Image1.Picture.Bitmap.Canvas.Pie(
0,0,w,h,
x2,y2,x1,y1
);
ss:=ss+v[i];
end;
end;
また、TChart(teechart)でグラフを作成するのもありかと思います。
https://mam-mam.net/delphi/vcl_teechart.html
ご参考まで。
mamさん、ありがとうございました。
TChartについても勉強してみます。
ツイート | ![]() |