c++ builder XE4, 10.2 Tokyo > TDateTime | TeeChart > データの時刻に合わせて、グラフの時刻範囲を自動変更する
4943 ワード
動作環境
C++ builder XE4
TeeChart Lite v2013.08.130414
RAD Studio 10.2 Tokyo Update 2 (追記 2018/01/10)
TeeChart v2016.17.160129 32bit VCL
やりたいこと
- データの時刻に合わせて、時間軸を自動的に変更したい
関連 http://qiita.com/7of9/items/de690c703d2d3e758607
Unit1.cpp
#include <DateUtils.hpp>
...
#if 0
static const int kRangeMinutes = 10;
#else
static const int kRangeMinutes = 2;
#endif
TDateTime __fastcall TFormGraphTemplate::TimeAxis_getRoundedDateTime_each10min(TDateTime srcDt)
{
int dt_min = srcDt.FormatString(L"nn").ToInt();
int reduce_min = dt_min % kRangeMinutes ; // for every 10 min
int reduce_sec = srcDt.FormatString(L"ss").ToInt();
TDateTime outDt = IncMinute(srcDt, - reduce_min);
outDt = IncSecond(outDt, - reduce_sec);
return outDt;
}
void __fastcall TFormGraphTemplate::TimeAxis_autoChangeRange_10min(TDateTime srcDt)
{
TDateTime curEdDt = Chart1->BottomAxis->Maximum;
if (srcDt <= curEdDt) {
return; // do nothing
}
TDateTime setStDt = TimeAxis_getRoundedDateTime_each10min(srcDt);
TDateTime setEdDt = IncMinute(setStDt, kRangeMinutes);
Chart1->BottomAxis->SetMinMax(setStDt, setEdDt);
}
関連ページと比べて「現在時刻の秒」も対応した。
kRangeMinutes はテスト用に入れたconst変数。リファクタリングでは取り除く。
TimeAxis_autoChangeRange_10min()はデータがプロットされるたびに呼んでおけば、データの時刻がグラフの時間軸範囲を超えたときに、時間軸が変更される。
実際やってみたところ、自動変更はされるが見た目はいまいち。
現在試験実装している別の表示の仕方の方がよさそうだが、簡易的な実装としてはこれでもいい。
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > TDateTime | TeeChart > データの時刻に合わせて、グラフの時刻範囲を自動変更する), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/b5729cd102fc81e7cf87著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .