動作環境
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()はデータがプロットされるたびに呼んでおけば、データの時刻がグラフの時間軸範囲を超えたときに、時間軸が変更される。
実際やってみたところ、自動変更はされるが見た目はいまいち。
現在試験実装している別の表示の仕方の方がよさそうだが、簡易的な実装としてはこれでもいい。