如何在执行时更新图表中的数据(在C ++构建器中)?

时间:2012-12-12 12:53:25

标签: c++ charts c++builder teechart

我正在使用Borland C ++ Builder来创建它。代码非常简单,因为它目前的唯一目的是帮助我学习如何使用TChart函数。我会用我学到的东西来创建一个更复杂的程序。

我有一系列必须在备忘录框和图表上显示的数字。程序完成其执行后会显示图表中的值,但是,我需要实时更新值 - 我的意思是,每次程序计算新数字时,都必须立即显示在图表上。有可能吗?如果是这样,我该怎么做?

提前致谢。

#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

   TChartSeries* series1 = Chart1->Series[0];
   series1->Clear();

   int num = 0;

   Memo1->Clear();

     for(int i=0; i<5000; i++)
     {
            num = num++;
            Memo1->Lines->Add(IntToStr(num));
            series1->AddXY(i, num, "", clGreen);

           }
   }

2 个答案:

答案 0 :(得分:3)

您应该随时强制重新绘制图表:

Chart1->Repaint();

所以你可以:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TChartSeries* series1 = Chart1->Series[0];
    series1->Clear();

    int num = 0;

    Memo1->Clear();

    for(int i=0; i<5000; i++)
    {
        num = num++;
        Memo1->Lines->Add(IntToStr(num));
        series1->AddXY(i, num, "", clGreen);
        Chart1->Repaint();
    }
}

或者,为了提高性能,您可以在添加一些值后强制重新绘制图表,而不是在每次添加之后。即:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TChartSeries* series1 = Chart1->Series[0];
    series1->Clear();

    int num = 0;

    Memo1->Clear();

    for(int i=0; i<5000; i++)
    {
        num = num++;
        Memo1->Lines->Add(IntToStr(num));
        series1->AddXY(i, num, "", clGreen);

        if (i % 100 == 0) {
            Chart1->Repaint();
        }
    }
}

答案 1 :(得分:2)

是的,这是一个旧帖子,但我建议其他任何人遇到它。您还可以重新绘制系列,这可能比重新绘制整个图表所需的开销更少。为此,请使用TChartSeries重绘方法。对于给定的示例,您将放置“series1-&gt; Repaint();”在某个地方,我猜想在for循环中。