C++ Builder XE4 > TeeChart > 다량 플롯 그리기 가속화 > 실행 코드(2019-04-11판)

운영 환경
C++ Builder XE4

2016년 3월 31일 기사 > 이해하기 어렵다


  • 2016-03-31 c++ builder / teechart > Link > 다량 플롯 그리기 가속화 + 실장 오류 수정 (2019-04-11)

  • 상기를 참고로 실장을 진행하려고 했지만, 알기 어렵다.

    또한 실장 실수도 발견되었다.

    벌써, 정말.

    실행 가능 코드 (2019-04-11 버전)



    Unit1.h
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    #include <Vcl.ExtCtrls.hpp>
    #include <VCLTee.Chart.hpp>
    #include <VCLTee.Series.hpp>
    #include <VCLTee.TeEngine.hpp>
    #include <VCLTee.TeeProcs.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE で管理されるコンポーネント
        TChart *Chart1;
        TFastLineSeries *Series1;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
    private:    // ユーザー宣言
    public:     // ユーザー宣言
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    

    Unit1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include <DateUtils.hpp>
    #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)
    {
        Chart1->Series[0]->XValues->DateTime = true;
        Chart1->BottomAxis->DateTimeFormat = L"nn:ss";
    
        TDateTime dt;
    
        dt = Now();
    
        int cnt = 0;
        TDoubleDynArray xs, ys;
    
        // 1. 既存データの読込み
        xs.Length += Series1->XValues->Count;
        ys.Length += Series1->XValues->Count;
        for(int idx=0; idx < Series1->XValues->Count; idx++) {
            xs[cnt] = Series1->XValues->Value[idx];
            ys[cnt] = Series1->YValues->Value[idx];
            cnt++;
        }
    
        // 2. 追加
        const int numData = 10;  // 追加データの個数
        xs.Length += numData;
        ys.Length += numData;
        double yval;
        for (int idx=0; idx < numData; idx++) {
            yval = (1+ idx) % 2;
            xs[cnt] = dt;
            ys[cnt] = yval;
            cnt++;
            //
            dt = IncMilliSecond(dt, 100);
        }
        Series1->XValues->Value = xs;
        Series1->XValues->Count = cnt;
        Series1->XValues->Modified = true;
        Series1->YValues->Value = ys;
        Series1->YValues->Count = cnt;
        Series1->YValues->Modified = true;
    
        Series1->Repaint();  // 描画の更新に必要
    }
    //---------------------------------------------------------------------------
    

    실행 예


  • 버튼을 몇 초 간격으로 누른 결과는 다음과 같습니다



  • 비고 > 자료로서


  • 움직이는 것을 확인한 코드를 놓는다
  • 독자에게 알기 쉬운 글쓰기
  • '40초에 지도하지 말라'에 대답할 수 있도록
  • 좋은 웹페이지 즐겨찾기