如何在运行时设置TAreaSeries颜色?

时间:2013-01-13 13:16:14

标签: delphi delphi-xe2 teechart

我有一个TAreaSeries填充了这样的数据: enter image description here

我正在使用此代码在图表上绘制垂直线:

procedure TfrmDistributionChart.dbcDistributionAfterDraw(Sender: TObject);
var
  XPos: Integer;
begin
  dbcDistribution.Canvas.Pen.Width := 3;

  dbcDistribution.Canvas.Pen.Color := clBlack;
  XPos := dbcDistribution.BottomAxis.CalcPosValue(0);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);

  dbcDistribution.Canvas.Pen.Color := clBlue;
  XPos := dbcDistribution.BottomAxis.CalcPosValue(-SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);
  XPos := dbcDistribution.BottomAxis.CalcPosValue(SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);

  dbcDistribution.Canvas.Pen.Color := clGreen;
  XPos := dbcDistribution.BottomAxis.CalcPosValue(-2 * SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);
  XPos := dbcDistribution.BottomAxis.CalcPosValue(2 * SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);

  dbcDistribution.Canvas.Pen.Color := clRed;
  XPos := dbcDistribution.BottomAxis.CalcPosValue(-3 * SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);
  XPos := dbcDistribution.BottomAxis.CalcPosValue(3 * SD);
  dbcDistribution.Canvas.DoVertLine(XPos, dbcDistribution.LeftAxis.IStartPos,
    dbcDistribution.LeftAxis.IEndPos);
end;

我想改变系列的颜色以匹配其外边框的颜色(例如,中央切片为蓝色,中间切片为绿色,最外层为红色)。这是否可以使用TeeChart Standard v2011.03.32815 32bit VCL?

另外,我找不到修剪垂直线的正确方法,以避免扩展到它们所绘制的区域之外。我应该如何计算这7条线中每条线的正确高度?

1 个答案:

答案 0 :(得分:4)

设置颜色有两种方法:

  • 为系列添加值时。

    Series1.AddXY(xVal,yVal,'',clYourColorBasedOnX(xVal));
    

    clYourColorBasedOnX( x : Double): TColor;是您定义的函数。

  • 在介绍该系列之前。

    Series1.ColorRange(Series1.XValues,x1,x2,clYourColor);
    

    使用您的范围进行一系列调用。


对于用户绘制的行最大值,尝试走Series.XValues [i]直到找到最接近的限制值,取索引并将max设置为Series1.YValues [index]。

重复,直到设置了所有限制。