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

または、パフォーマンスを向上させるために、値を追加するたびにではなく、値を追加した後に強制的にチャートを再描画することができます。すなわち:

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 の repaint メソッドを使用します。この例では、「series1->Repaint();」を配置します。for ループのどこかにあると思います。

于 2013-09-11T18:20:48.953 に答える