0

我正在使用 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);

           }
   }
4

2 回答 2

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();
    }
}

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

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();
        }
    }
}
于 2012-12-12T15:39:20.783 回答
2

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

于 2013-09-11T18:20:48.953 回答