//修改当前的样式。 procedure TFormShuJuFenXiChart.ChangeCurStyle(Flag: TChartStyle_J); var i : integer; Scount : Integer; begin //根据 Flag 的值 ,确定要把当前的分析条目转换成什么样式。 //基本思路:采用一个动态数组,把当前所有的条目转形之后保存起来。 //然后把原有的条目清空,把数组中已更换过样式的条目添加到J_Chart1中。 Scount := J_Chart1.SeriesCount; if Scount > 0 then begin setlength(SeriesArr,Scount); if flag = cjBar then begin for i := 0 to Scount -1 do begin SeriesArr[i].Series := TBarSeries.Create(Self); SeriesArr[i].Series.Assign(TBarSeries(J_Chart1.Series[i])); SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor; end; end; if flag = cjHorizBar then begin for i := 0 to Scount -1 do begin SeriesArr[i].Series := THorizBarSeries.Create(Self); SeriesArr[i].Series.Assign(THorizBarSeries(J_Chart1.Series[i])); SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor; end; end; if flag = cjArea then begin for i := 0 to Scount -1 do begin SeriesArr[i].Series := TAreaSeries.Create(Self); SeriesArr[i].Series.Assign(TAreaSeries(J_Chart1.Series[i])); SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor; end; end; if flag = cjLine then begin for i := 0 to Scount -1 do begin SeriesArr[i].Series := TLineSeries.Create(Self); SeriesArr[i].Series.Assign(TLineSeries(J_Chart1.Series[i])); SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor; end; end; //清空现在的series J_Chart1.RemoveAllSeries; //再次添加到 J_Chart1 中。 for i := 0 to Scount -1 do begin SeriesArr[i].Series.ParentChart := J_Chart1; SeriesArr[i].series.SeriesColor := SeriesArr[i].Series.SeriesColor; J_Chart1.AddSeries(SeriesArr[i].Series); end; end; //以当前的条目样式,确定相对应的条目样式。 SeriesStyle; //告诉控件进行了更改样式的操作。 J_Chart1.SetFisChange(cChange);end;我是把TChart做了再次的封装。 //只针对 Bar and HorizBar and Area 修改样式。 TTivChart是我的控件。 procedure TTivChart.ChangeStyle(AStyle: TObject); var i : Integer; begin try if Self.SeriesCount <> 0 then begin if self.Series[0] is TBarSeries then for i := 0 to self.SeriesCount -1 do begin (self.Series[i] as TBarSeries).BarStyle := TBarStyle(AStyle); // (self.Series[i] as TBarSeries).MultiBar := TMultiBar(AStyle); end; if self.Series[0] is THorizBarSeries then for i := 0 to self.SeriesCount -1 do begin (self.Series[i] as THorizBarSeries).MultiBar:=TMultiBar(AStyle); end; if self.Series[0] is TAreaSeries then for i := 0 to self.SeriesCount -1 do begin (self.Series[i] as TAreaSeries).MultiArea := TMultiArea(Astyle); end; end; except end; end;
ChangeStyle方法是改变当前的series的样式。我只做了三种。 调用方法是: if J_Chart1.SeriesCount <> 0 then begin if J_Chart1.Series[0] is TBarSeries then J_chart1.ChangeStyle(TObject(CBStyleBar.Itemindex)); if J_Chart1.Series[0] is THorizBarSeries then J_chart1.ChangeStyle(TObject(CBStyleHorizBar.Itemindex)); if J_Chart1.Series[0] is TAreaSeries then J_chart1.ChangeStyle(TObject(CBStyleArea.Itemindex)); end;我帖的代码有点乱。我现在正在改这段程序呢。在这里只是给楼主一点思路罢了。水平菜的很。别笑我就是了。
procedure TFormShuJuFenXiChart.ChangeCurStyle(Flag: TChartStyle_J);
var
i : integer;
Scount : Integer;
begin
//根据 Flag 的值 ,确定要把当前的分析条目转换成什么样式。
//基本思路:采用一个动态数组,把当前所有的条目转形之后保存起来。
//然后把原有的条目清空,把数组中已更换过样式的条目添加到J_Chart1中。
Scount := J_Chart1.SeriesCount;
if Scount > 0 then begin
setlength(SeriesArr,Scount);
if flag = cjBar then begin
for i := 0 to Scount -1 do begin
SeriesArr[i].Series := TBarSeries.Create(Self);
SeriesArr[i].Series.Assign(TBarSeries(J_Chart1.Series[i]));
SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor;
end;
end; if flag = cjHorizBar then begin
for i := 0 to Scount -1 do begin
SeriesArr[i].Series := THorizBarSeries.Create(Self);
SeriesArr[i].Series.Assign(THorizBarSeries(J_Chart1.Series[i]));
SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor;
end;
end; if flag = cjArea then begin
for i := 0 to Scount -1 do begin
SeriesArr[i].Series := TAreaSeries.Create(Self);
SeriesArr[i].Series.Assign(TAreaSeries(J_Chart1.Series[i]));
SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor;
end;
end; if flag = cjLine then begin
for i := 0 to Scount -1 do begin
SeriesArr[i].Series := TLineSeries.Create(Self);
SeriesArr[i].Series.Assign(TLineSeries(J_Chart1.Series[i]));
SeriesArr[i].SeriesColor := J_Chart1.Series[i].SeriesColor;
end;
end;
//清空现在的series
J_Chart1.RemoveAllSeries;
//再次添加到 J_Chart1 中。
for i := 0 to Scount -1 do begin
SeriesArr[i].Series.ParentChart := J_Chart1;
SeriesArr[i].series.SeriesColor := SeriesArr[i].Series.SeriesColor;
J_Chart1.AddSeries(SeriesArr[i].Series);
end;
end;
//以当前的条目样式,确定相对应的条目样式。
SeriesStyle;
//告诉控件进行了更改样式的操作。
J_Chart1.SetFisChange(cChange);end;我是把TChart做了再次的封装。
//只针对 Bar and HorizBar and Area 修改样式。
TTivChart是我的控件。
procedure TTivChart.ChangeStyle(AStyle: TObject);
var
i : Integer;
begin
try
if Self.SeriesCount <> 0 then
begin
if self.Series[0] is TBarSeries then
for i := 0 to self.SeriesCount -1 do
begin
(self.Series[i] as TBarSeries).BarStyle := TBarStyle(AStyle);
// (self.Series[i] as TBarSeries).MultiBar := TMultiBar(AStyle);
end;
if self.Series[0] is THorizBarSeries then
for i := 0 to self.SeriesCount -1 do
begin
(self.Series[i] as THorizBarSeries).MultiBar:=TMultiBar(AStyle);
end;
if self.Series[0] is TAreaSeries then
for i := 0 to self.SeriesCount -1 do
begin
(self.Series[i] as TAreaSeries).MultiArea := TMultiArea(Astyle);
end;
end;
except
end;
end;
调用方法是:
if J_Chart1.SeriesCount <> 0 then
begin
if J_Chart1.Series[0] is TBarSeries then
J_chart1.ChangeStyle(TObject(CBStyleBar.Itemindex));
if J_Chart1.Series[0] is THorizBarSeries then
J_chart1.ChangeStyle(TObject(CBStyleHorizBar.Itemindex));
if J_Chart1.Series[0] is TAreaSeries then
J_chart1.ChangeStyle(TObject(CBStyleArea.Itemindex));
end;我帖的代码有点乱。我现在正在改这段程序呢。在这里只是给楼主一点思路罢了。水平菜的很。别笑我就是了。