我正在使用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);
}
}
答案 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循环中。