如何在代码中实现转变TDBChart.Series的点状及线状状态??
因为Seriers是动态生成的,因此需要改变其点状及线状状态提供给用户选择,如何实现??
(如我创建了一个点状图表,现需修改其点状态〔由圆形点该为星状点..〕)

解决方案 »

  1.   

    //修改当前的样式。
    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;
      

  2.   

    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;我帖的代码有点乱。我现在正在改这段程序呢。在这里只是给楼主一点思路罢了。水平菜的很。别笑我就是了。