请问如何在运行期改变图形的类型(如:‘将线型图改为饼型图’)?(100分)

  • 主题发起人 主题发起人 leonwang
  • 开始时间 开始时间
VtChart1.ChartType:=2;//2即为类型
Chartfx1.ChartType:=2;
 
Tchart改不了
 
设计两个,隐藏一个,需要在切换一下。
我是这样做的。
 
rss的方法可行,我是这样做的。
chart1.series[0].Clear;
chart1.series[1].Clear;
chart1.Title.text.text:=inttostr(year)+'年签定合同金额情况';
for temp:=1 to 12do
begin
chart1.series[0].Add(a.htjine[temp],inttostr(temp)+'月',barcolor[temp]);
chart1.series[1].Add(a.htjine[temp],inttostr(temp)+'月',barcolor[temp]);
end;

chart1.series[0].Active:=true;
Chart1.series[1].Active:=false;
这是我的程序中的一个片段。

 
chart1.SeriesList[0].Active:=not chart1.SeriesList[0].Active;
chart1.SeriesList[1].Active:=not chart1.SeriesList[1].Active;
 
我觉得rss的方法简单,也可靠
 
在TeeChart homepage的 fag 里有提到用
ChangeSeriesType method.
var tmp : TChartSeries;
begin
tmp := Series1;
ChangeSeriesType(tmp,TChartSeriesClass(TPieSeries));
end;
 
用TChart完全可以:
{转换SERIES类型过程}
procedure ChangeSeriesType(TarChart:TCustomChart;
TarSeries:TCustomSeries;tmpS:TChartSeriesClass);
var
tmpSeries:TChartSeries;
i:integer;
begin
i:=TarChart.SeriesList.IndexOf(TarSeries);
tmpSeries:=tmps.Create(TarChart);
tmpSeries.ParentChart:=TarChart;
while i<TarChart.SeriesList.IndexOf(tmpSeries)do
TarChart.SeriesUp(tmpSeries);
while i>TarChart.SeriesList.IndexOf(tmpSeries)do
TarChart.SeriesDown(tmpSeries);
tmpSeries.SeriesColor:=TarSeries.SeriesColor;
tmpSeries.DataSource:=TarSeries;
tmpSeries.Title:=TarSeries.title;
tmpSeries.Active:=true;
TarSeries.Free;
end;

//比如将Series1转换为TBarSeries型
ChangeSeriesType(Chart1,Series1,TBarSeries);
OK!:-)
 
ChangeSeriesType 已经是 TChart method,能再用回同样名的
procedure 吗 ?
 
to weisian:
>在TeeChart homepage的 fag 里有提到用
>ChangeSeriesType method.
你用过吗?
DELPHI虽声称有这么个方法,但实际上并没有,你不妨试一试。
 
Sorry!上次的代码有些问题,应该这样:
{转换SERIES类型过程}
procedure ChangeSeriesType(TarChart:TCustomChart;
TarSeries:TCustomSeries;tmpS:TChartSeriesClass);
var
tmpSeries:TChartSeries;
i:integer;
begin
i:=TarChart.SeriesList.IndexOf(TarSeries);
tmpSeries:=tmps.Create(TarChart);
tmpSeries.ParentChart:=TarChart;
while i<TarChart.SeriesList.IndexOf(tmpSeries)do
TarChart.SeriesUp(tmpSeries);
while i>TarChart.SeriesList.IndexOf(tmpSeries)do
TarChart.SeriesDown(tmpSeries);
tmpSeries.SeriesColor:=TarSeries.SeriesColor;
tmpSeries.DataSource:=TarSeries;
tmpSeries.Title:=TarSeries.title;
tmpSeries.Active:=true;
TarSeries.Free;
end;

//比如将Series1转换为TBarSeries型
ChangeSeriesType(Chart1,Series1,TBarSeries);
OK!:-)
 
>在TeeChart homepage的 fag 里有提到用
>ChangeSeriesType method.
>>你用过吗?
>>DELPHI虽声称有这么个方法,但实际上并没有,你不妨试一试。
有啊.我的project里画了数十个series的线型图,再把第一个的线型图换
成BarSeries.是这样写的:
tmpSeries := Chart1.Series[0];
ChangeSeriesType(tmpSeries,TChartSeriesClass(TBarSeries));
 
to weisian:
佩服!
我以前一直以为ChangeSeriesType是Chart的一个过程,谁知既然是一个全局
的过程。

weisian的答案是最好的,接受答案吧!
 
多谢各位高手的解答!
 
比我想的水平高那么一点点
 
后退
顶部