源代码(采用A1.b,A2.b方法实现):
http://download.csdn.net/detail/zj060607/6737403
解决两个问题:
1. 时间轴如何实现
2. 横轴如何自右向左移动
A1:时间轴
方法a. 在label字符串显示
CTime t = CTime::GetCurrentTime();
m_chartTime.Series(0).AddXY(fTime,flY,t.Format("%H:%M:%S"),0);
缺点:MasksTip默认显示X轴(fTime)数据,而不是时间,需要做如下设置。
//MasksTip
m_chartTime.GetTools().Add(8); //ToolList添加 tcMarksTip = 8
m_chartTime.GetTools().GetItems(0).GetAsMarksTip().SetMouseAction(mtmMove);
m_chartTime.GetTools().GetItems(0).GetAsMarksTip().SetDelay(250);
m_chartTime.GetTools().GetItems(0).GetAsMarksTip().SetStyle(smsLabelValue);//默认是smsXY
方法b:设定x轴为时间类型,主要分为两步。参见[1]P187
1. 设定DateTime属性为True,并设定时间格式:
m_chartTime.Series(0).GetXValues().SetDateTime(TRUE);
m_chartTime.GetAxis().GetBottom().GetLabels().SetDateTimeFormat("hh:mm:ss");
2. 使用序列的AddXY增加一个点的值
m_chartTime.Series(0).AddXY(dblX,dblY,"",0);
A2:横轴自右向左移动
方法a..滚动函数
m_chartTime.GetAxis().GetBottom().Scroll(1.0,TRUE);
步骤:
1.初始化:
m_chartTime.GetAxis().GetBottom().SetAutomatic(TRUE);
m_chartTime.GetAxis().GetBottom().SetMinMax(0,10);
2.onTimer隔一段时间改一下横轴
staticdouble s_dbX=10.0;
s_dbX=s_dbX+1;
dblX= s_dbX;
m_chartTime.Series(0).AddXY(dblX,dblY,curTime.Format("%M:%S"),0);
m_chartTime.GetAxis().GetBottom().Scroll(1.0,TRUE);
方法b.设置最大值,最小值
m_chartTime.GetAxis().GetBottom().SetMinMax(dblX-50/84600.,dblX);
步骤:
1.初始化:
COleDateTimeCurTime=COleDateTime::GetCurrentTime();
//最小值(dTime-50s),最大值dTimes
m_chartTime.GetAxis().GetBottom().SetMinMax(CurTime.m_dt-50/84600.,CurTime.m_dt);
2.onTimer隔一段时间改一下横轴
double dblX;
COleDateTimecurTime = COleDateTime::GetCurrentTime();
dblX= curTime.m_dt;
srand((unsignedlong)time(0));
doubledblY = rand()%20;
m_chartTime.Series(0).AddXY(dblX,dblY,curTime.Format("%M:%S"),0);
m_chartTime.GetAxis().GetBottom().SetMinMax(dblX-50/84600.,dblX);
reference:
[1].Teechart应用技术详解
PS:下面的内容如何去掉呢?