IDE: c++ Builder XE5 Update 2
TeeChart Build: 2014.11.140512
我正试图将TChart
组件上的某些系列带到前面(就像您通常使用BringToFront()
功能一样)。
我做了一些阅读,发现以下选项/建议:
。修改系列的ZOrder
属性
B。使用TChart.ExchangeSeries()
使用TChart.ExchangeSeries()
不是改变序列z轴顺序的合适方法。它的主要功能是在TChart
组件的SeriesList
中交换两个系列(然后内在地改变这些系列的z轴顺序)。如果您需要固定的序列排序(SeriesList
中的固定排序),那么这将不起作用。
改变该系列的ZOrder
属性可以获得更好的结果。然而,改变第一个系列的ZOrder
(Series[0]
)显然没有任何作用。Series[0]
似乎喜欢坐在教室的后面。
以上可能是我实现的结果。在这种情况下,更多的细节:
在我的TChart
组件我有多个系列。系列类型可以动态更改。修改系列的类型仅限于TLineSeries
和TBarSeries
。
我总是希望TLineSeries
在前面。
(我们会看到难以捉摸的TChartSeries.BringToFront()
函数吗?):)
关于如何做到这一点,有什么建议吗?
看起来混合系列风格和改变ZOrder不是很好工作。例如,使用以下代码片段:
uses Series;
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues(10);
Chart1.AddSeries(TLineSeries.Create(Self)).FillSampleValues(10);
Chart1.AddSeries(TBarSeries.Create(Self)).FillSampleValues(10);
Chart1.AddSeries(TBarSeries.Create(Self)).FillSampleValues(10);
Chart1.AddSeries(TBarSeries.Create(Self)).FillSampleValues(10);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=0 to Chart1.SeriesCount-1 do
begin
Chart1[i].Marks.Visible:=False;
if Chart1[i] is TLineSeries then
Chart1[i].ZOrder:=Chart1.SeriesCount - 1 - i
else
Chart1[i].ZOrder:=i;
end;
end;
行系列被带到前面,但条形系列样式仍然在那里。我也尝试过StackGroups bar系列:然而,它并没有太大的区别。对于这项工作,我们还需要StackGroups用于line series。
(我们会看到难以捉摸的TChartSeries.BringToFront()函数吗?):)
为什么不呢?我已将您的请求添加到Steema Software的bugzilla平台:http://bugs.teechart.net/show_bug.cgi?id=853。请随时注册并将自己添加到抄送列表中,以接收自动问题更新。