C++ Builder XE TChart动态添加N个线条TLineSeries变化

       

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        LARGE_INTEGER litmp;
        LONGLONG QPart1,QPart2;
        double dfMinus, dfFreq, dfTim;
        QueryPerformanceFrequency(&litmp);
        dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
        QueryPerformanceCounter(&litmp);
        QPart1 = litmp.QuadPart;// 获得初始值
      //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        //--------------------------------------------------------------
                RzProgressStatus1->Percent=0;    //进度完成
       //-------------------------------------------------------------
if(Memo3->Lines->Count<2)
  return;
//模块扫描
AnsiString MKstr=ComboBox1->Text;
int MKkind=ComboBox1->ItemIndex;
 //清空所有图表显示
  TControl *Control;
 for(int i=ScrollBox1->ControlCount;i>0;i--)
   {
    Control=ScrollBox1->Controls[i-1];
    delete Control;
    Control=NULL;
   }
   //验证N期彩果
   int Cnum=RzSpinEdit1->EditText.ToInt();
   //验证N个模块
   //Form2->RzListView3->Refresh();
   int MKnum=Form2->RzListView3->Items->Count;
   if(MKnum==0)
   {
      Form2->RzListView3->Clear();
      TStringList*   Strings   =   new   TStringList;
      TStringList*   TJs   =   new   TStringList;
      TJs->Delimiter='#';
      Strings->LoadFromFile(ExtractFilePath(ParamStr(0))+"ml.tj");
      TListItem *pItem=0;
      for(int   n=0;   n<Strings->Count;   n++)
      {
              TJs->DelimitedText=Strings->Strings[n];
              //

             pItem=Form2->RzListView3->Items->Add();
             pItem->Caption=TJs->Strings[1];
             pItem->SubItems->Add(TJs->Strings[2]);
             pItem->SubItems->Add(TJs->Strings[3]);
             pItem->SubItems->Add(TJs->Strings[4]);
             if(TJs->Strings[0]=="Y")
                pItem->Checked=true;
             else
                pItem->Checked=false;
      }
      //
      delete   Strings;
      delete TJs;
     MKnum=Form2->RzListView3->Items->Count;
   }
       //--------------------------------------------------------------
                RzProgressStatus1->Percent=10;    //进度完成
       //-------------------------------------------------------------
   //显示N个模块数
   int XSnum=0;
   for(int Ci=0;Ci<MKnum;Ci++)
   {
       if( Form2->RzListView3->Items->Item[Ci]->Checked)
       {
           XSnum++;
       }

   }
   if(XSnum==0)
     return;
//定义显示N个模块历期的走势
TRzEdit **Etxt=new TRzEdit *[XSnum ];
//定义显示N个图表的走势
TChart **serRL=new TChart *[XSnum ];
        //------------------------
        //装入彩果
        //------------------------
        TStringList *Strings=new TStringList;
        Strings->AddStrings(Form1->Memo3->Lines);    //缓冲载入到字符链表
        int CGsum=Strings->Count;             //彩果期数
        int CGsumcz=0;
        //查找验证到某一期
        for (int i = 0; i < CGsum; i++)//为什么要等于CGsum,主要是你要预测下一期
        {
           if(Strings->Strings[i].Length()) //如果不为空
            {
                if(!Strings->Strings[i].Pos("="))
                  CGsumcz++;   // 验证到此一期为止
                else
                  break;//验证到止为止
            }
        }
        //
               //--------------------------------------------------------------
                RzProgressStatus1->Percent=20;    //进度完成
       //-------------------------------------------------------------
//定义图表线条
TLineSeries*  Series1;
int XSi=0;
int FZtz[10];
for(int Ci=MKnum-1;Ci>=0;Ci--)
 {
  if(Form2->RzListView3->Items->Item[Ci]->Checked)  //模块要显示
  {
    //分组特征码
    AnsiString TZM= Form2->RzListView3->Items->Item[Ci]->SubItems->Strings[2];
    memset(FZtz,0,sizeof(int)*10);
    int FZ=0;
    for(int Ti=1;Ti<=TZM.Length();Ti++)
    {
      if(TZM.SubString(Ti,1)==",")
        FZ++;
       else
       {
         FZtz[TZM.SubString(Ti,1).ToInt() ]=FZ;
       }
    }

    //创建图表显示
    serRL[XSi]=new TChart(this);
    serRL[XSi]->Parent=ScrollBox1;
    serRL[XSi]->Align=alTop;
    serRL[XSi]->Height=145; //高度
    serRL[XSi]->View3D=false;     //关掉3D显示

   //    serRL[XSi]->Title->Caption="模块[ "+AnsiString(Ci)+" ] -"+Form2->RzListView3->Items->Item[Ci]->SubItems->Strings[0];   //定义标题
    serRL[XSi]->Margins->Top=0;
    serRL[XSi]->Margins->Bottom=0;
    serRL[XSi]->Margins->Right=0;
    serRL[XSi]->Margins->Left=0;
    serRL[XSi]->MarginLeft=0;
    serRL[XSi]->MarginBottom=0;
    serRL[XSi]->MarginRight=2;
    serRL[XSi]->MarginTop=0;
    serRL[XSi]->Legend->Visible=false; //关掉图表右边的显示标签框
    //serRL[XSi]->Legend->Items->Clear();
    //serRL[XSi]->Legend->Items->Add()
    serRL[XSi]->LeftAxis->Increment=1; //左坐标的标尺单元长度
    serRL[XSi]->MarginTop=10;
   //创建走势线
//   for(int i=Cnum-1;i>=0;i--)
//   {
        Series1 = new TLineSeries(serRL[XSi]);
        Series1->ParentChart=serRL[XSi];
        serRL[XSi]->AddSeries(Series1);
        serRL[XSi]->SeriesList->Items[0]->Clear();
        serRL[XSi]->SeriesList->Items[0]->Active=true;
        serRL[XSi]->SeriesList->Items[0]->Visible=true;
        serRL[XSi]->SeriesList->Items[0]->Pen->Visible=true;
        serRL[XSi]->SeriesList->Items[0]->Pen->Width=1;
        serRL[XSi]->SeriesList->Items[0]->Pen->Style=psSolid;
        serRL[XSi]->SeriesList->Items[0]->Pen->Color= 6711039;
        serRL[XSi]->SeriesList->Items[0]->Pen->SmallSpace=1;
        serRL[XSi]->SeriesList->Items[0]->Pen->Show();
        serRL[XSi]->SeriesList->Items[0]->SeriesColor=clRed;
        //------------------------------------------------------------------
        int NZi=0;
        int SZtmp;
        AnsiString TZstr=" 模块[ "+AnsiString(Ci+1)+" ]  -  "+MKstr+"  特征码:["+TZM+"]  "+Form2->RzListView3->Items->Item[Ci]->SubItems->Strings[0]+"  特征串: ";
        for (int Gi = CGsumcz-Cnum; Gi < CGsumcz; Gi++)//为什么要等于CGsum,主要是你要预测下一期
        {
             if(!Strings->Strings[Gi].Pos("="))
             {
                if(Strings->Strings[Gi].Length()) //如果不为空
                {
                   SZtmp=RightStr(Strings->Strings[Gi],3).ToInt();
                   if(MKkind==0)  //扫描个位
                   {
                    serRL[XSi]->SeriesList->Items[0]->AddXY(NZi,FZtz[SZtmp%10],FZtz[SZtmp%10],clRed);
                    TZstr+=FZtz[SZtmp%10];
                   }
                   else if(MKkind==1)  //扫描十位
                   {
                    serRL[XSi]->SeriesList->Items[0]->AddXY(NZi,FZtz[SZtmp%100/10],FZtz[SZtmp%100/10],clRed);
                    TZstr+=FZtz[SZtmp%100/10];
                   }
                   else if(MKkind==2)  //扫描百位
                   {
                    serRL[XSi]->SeriesList->Items[0]->AddXY(NZi,FZtz[SZtmp/100],FZtz[SZtmp/100],clRed);
                    TZstr+=FZtz[SZtmp/100];
                   }
                   else if(MKkind==3)  //和尾扫描
                   {
                    serRL[XSi]->SeriesList->Items[0]->AddXY(NZi,FZtz[(SZtmp/100+SZtmp/10%10+SZtmp%10)%10],FZtz[(SZtmp/100+SZtmp/10%10+SZtmp%10)%10],clRed);
                    TZstr+=FZtz[(SZtmp/100+SZtmp/10%10+SZtmp%10)%10];
                   }

                    NZi++;

                }
             }
             else
                break;
        }
        //显示特征串
    //创建特征值显示
    Etxt[XSi]=new TRzEdit(this);
    Etxt[XSi]->Parent=ScrollBox1;

    Etxt[XSi]->Align=alTop;
    Etxt[XSi]->Height=20;
        Etxt[XSi]->Text=TZstr;
    Etxt[XSi]->Font->Color=clRed;
         //serRL[i]->SeriesList->Items[0]->Style=TLineSeries;//TBarSeries;
//        int Sx=0;
//            for(int Si=Memo3->Lines->Count-1;Si>Memo3->Lines->Count-Cnum ;Si--)
//            {
//               if( !Memo3->Lines->Strings[Si].Pos("="))
//               {
//                serRL[XSi]->SeriesList->Items[0]->AddXY(Sx,RightStr(Memo3->Lines->Strings[Si],1).ToInt(),RightStr(Memo3->Lines->Strings[Si],1).ToInt(),clRed);
//                Sx++;
//               }
//                }
        //------------------------------------------------------------------
        serRL[XSi]->SeriesList->Items[0]->ShowInLegend=false;  //关掉显示标签
        serRL[XSi]->SeriesList->Items[0]->Marks->Visible=true;
        serRL[XSi]->SeriesList->Items[0]->Marks->Symbol->Visible=false;

        //
        serRL[XSi]->SeriesList->Items[0]->Marks->Arrow->Style=psCircle ;
        serRL[XSi]->SeriesList->Items[0]->Marks->ArrowLength=4;
        serRL[XSi]->SeriesList->Items[0]->Marks->Arrow->Color=clRed;
        serRL[XSi]->SeriesList->Items[0]->Marks->Symbol->Transparent=true;
        serRL[XSi]->SeriesList->Items[0]->ShowInEditor=false;
        Series1->Marks->Visible=true;
        //serRL[i]->Legend->CheckBoxes=false;
   //}
   XSi++;//显示模块加1

  }
       //--------------------------------------------------------------
                RzProgressStatus1->Percent=20+(MKnum-Ci)*80/MKnum;    //进度完成
       //-------------------------------------------------------------

 }
      //-----------------------------------------------------------
       //时钟计算
          QueryPerformanceCounter(&litmp);
          QPart2 = litmp.QuadPart;//获得中止值
          dfMinus = (double)(QPart2-QPart1);
          dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒

       //--------------------------------------------------------------
                RzProgressStatus1->Percent=100;    //进度完成
       //-------------------------------------------------------------
        RzStatusPane1->Caption =
                    "彩果更新完成 ";
        RzStatusPane2->Caption =
                    "耗时:"+FloatToStrF(dfTim,ffFixed,4,3)+" 秒 ";
        // 清除临时表
           delete Strings;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzksword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值