急急急!在c++ builder中怎样让Chart画图控件怎样刷新??拜托各位帮帮忙!

junfa2013 2012-03-13 02:35:41
我要实现的结果是让Chart画的波形像示波器那样一直都满屏,不要像我现在的程序每画满100个点后全部清除然后再从左往右画。我想实现当Chart画满100个点时,从左边开始每画一个点就同时把原来最右边的第100个点自动删除,让画面上一直保持有100个点,其他的点不变让他们继续显示。我程序如下:

int NumPrint3=0;
void __fastcall TForm9::Timer1Timer(TObject *Sender)
{
Series3->AddY(c1);
Series2->AddY(c2);
Series1->AddY(c3);

if(NumPrint3<101)
{
Chart1-> Refresh();

NumPrint3++;
}
else
{
NumPrint3=0;
Series3->Clear();
Series2->Clear();
Series1->Clear();
Chart1-> Refresh();
}
}
...全文
884 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxzero120 2013-04-09
  • 打赏
  • 举报
回复
遇到同样的问题,楼主是如何解决的?
junfa2013 2012-04-02
  • 打赏
  • 举报
回复
那个例子我还看得满头雾水。多谢各位啦!我已经搞定了。
我是必胜客 2012-03-27
  • 打赏
  • 举报
回复
BCB6中的Teechart的例子如果刚开始看确实不容易。
junfa2013 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kerbcurb 的回复:]
yt还是那一组数据,下面是另一种结果:


C/C++ code

Chart1->BottomAxis->SetMinMax(0, 165 );
Chart1->LeftAxis->SetMinMax(0, 50 );
for ( int i = 0; i < 5; i++ )
{
for ( int j = 0; j < 165……
[/Quote]哥们,你这个程序是不是有问题呀??好像有点怪。横坐标的最大值你设置为165,然后你循环5次,每次循环都在0至165坐标轴上重复画点,而且你只是用到Chart1->Refresh()。在最后你还用到if ( i < 4 )
Chart1->Series[0]->Clear();
小弟真是看到有点头晕,还望大哥你能抽空替小弟抓抓主意!
junfa2013 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kerbcurb 的回复:]
这个帖子:http://topic.csdn.net/u/20120317/15/74afbf0f-b36d-4d5f-92ca-be97358f499f.html?seed=83241782&r=77932467#r_77932467
我已经回答了3次,在这里回答你的那个问题:不知道你的相当于Y轴的数据是怎么获得的,如果是实时数据,你大概得弄两个数组,temp1[100], temp2……
[/Quote]我的是实时数据:
byte buff[100];//声明一个存储接收数据的缓冲区
int ByteNum;//收到的字节数
OleVariant RxBuff;
if(MSComm1->CommEvent==comEvReceive)//表示接收缓冲区内有字符
{
if(MSComm1->InBufferCount>0)
{
RxBuff=MSComm1->Input;//如果缓冲区中有多于一个字节的数据
ByteNum=RxBuff.ArrayHighBound(1);
for(int i=0;i<=ByteNum;i++)buff[i]=RxBuff.GetElement(i);
if(buff[0]!=0)
{
data1=(buff[2]<<8|buff[1])*0.1;
data2=(buff[4]<<8|buff[3])*0.1;
data3=(buff[6]<<8|buff[5])*0.1;
data4=(buff[8]<<8|buff[7])*0.1;
data5=(buff[10]<<8|buff[9])*0.1;
data6=(buff[12]<<8|buff[11])*0.1;
data7=(buff[14]<<8|buff[13])*0.1;
data8=(buff[16]<<8|buff[15])*0.1;
data9=(buff[18]<<8|buff[17])*0.1;
data10=(buff[20]<<8|buff[19])*0.1;
data11=(buff[22]<<8|buff[21])*0.1;
data12=(buff[24]<<8|buff[23])*0.1;
data13=(buff[26]<<8|buff[25])*0.1;
data14=(buff[28]<<8|buff[27])*0.1;
data15=(buff[30]<<8|buff[29])*0.1;
data16=(buff[32]<<8|buff[31])*0.1;
data17=(buff[34]<<8|buff[33])*0.1;
data18=(buff[36]<<8|buff[35])*0.1;
data19=(buff[38]<<8|buff[37])*0.1;
}
}
}
kerbcurb 2012-03-17
  • 打赏
  • 举报
回复
这个帖子:http://topic.csdn.net/u/20120317/15/74afbf0f-b36d-4d5f-92ca-be97358f499f.html?seed=83241782&r=77932467#r_77932467
我已经回答了3次,在这里回答你的那个问题:不知道你的相当于Y轴的数据是怎么获得的,如果是实时数据,你大概得弄两个数组,temp1[100], temp2[100],一个用于当前显示用的,另一个相当于缓冲池:temp2[100],在显示temp1的时候,获得temp2,显示完temp1后,显示temp2,这时temp1作为缓冲数组。
kerbcurb 2012-03-17
  • 打赏
  • 举报
回复
yt还是那一组数据,下面是另一种结果:


Chart1->BottomAxis->SetMinMax(0, 165 );
Chart1->LeftAxis->SetMinMax(0, 50 );
for ( int i = 0; i < 5; i++ )
{
for ( int j = 0; j < 165; j++ )
{
Chart1->Series[0]->AddXY ( j, yt[j], "", clTeeColor );
Application->ProcessMessages();
Chart1->Refresh();
}
if ( i < 4 )
Chart1->Series[0]->Clear();
}
junfa2013 2012-03-16
  • 打赏
  • 举报
回复
路过的高手们见路不平帮一把吧!怎么我的程序不行呀??????没有反应!!我的left轴和Bottom轴设置为非automatic,两者的labels中的style设置为value。看怎么改才能实现通过拖拉滚动条ScrollBar1实现查看所有波形,但在没有拖拉滚动条时画面则显示最新那一屏的波形。横坐标想用"H:NN:SS "来做刻度。我该怎么办呢?帮帮小弟一把吧!!!真的很急用!我搞了很久尝试了很多方法都没进展,论坛上也喊了很久没人理,哎,水平低真是悲剧!!
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit7.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm7 *Form7;
double x1,x2,x3;
//---------------------------------------------------------------------------
__fastcall TForm7::TForm7(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm7::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
int NumPrint1=0;

void __fastcall TForm7::Timer1Timer(TObject *Sender)
{

x1=Form1->temp1;
x2=Form1->temp2;
x3=Form1->temp3;
Series3->AddY(x1,FormatDateTime( "H:NN:SS ", Now()));
Series2->AddY(x2,FormatDateTime( "H:NN:SS ", Now()));
Series1->AddY(x3,FormatDateTime( "H:NN:SS ", Now()));
Chart1-> BottomAxis-> Title-> Caption ="A相峰峰值: "+FormatFloat( "##0.00 ",Series1-> MaxYValue()-Series1-> MinYValue());

}
//---------------------------------------------------------------------------

void __fastcall TForm7::Button3Click(TObject *Sender)
{
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm7::Button1Click(TObject *Sender)
{
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm7::FormCreate(TObject *Sender)
{

Chart1->BottomAxis->SetMinMax(ScrollBar1->Position,100+ScrollBar1->Position);
}
//---------------------------------------------------------------------------
junfa2013 2012-03-15
  • 打赏
  • 举报
回复
没有高手能帮我解决这个小问题吗??因为那个例子没看到我想要的点。我只想着能满屏显示100个点,当显示第101个时第1个点就给挤出画面就行了,不用什么滚动条之类,让画面一直动态显示最新的100个数据。拜托各位高手,帮帮忙吧!
junfa2013 2012-03-15
  • 打赏
  • 举报
回复
那个自带例子我看起来很纠结,只因小弟水平太低!
我不懂电脑 2012-03-14
  • 打赏
  • 举报
回复
你可以看看bcb6下teeachart的例子较详细
hind24 2012-03-14
  • 打赏
  • 举报
回复
不用删点
XAxis->SetMinMax(Min,Max);
of123 2012-03-14
  • 打赏
  • 举报
回复
只能说一下我曾经是怎样做的。

我当时是做了一个大量数据滚屏显示的功能。我定义了一个二维的 Variant 型数组,滚屏时,将新的数据复制到这个数字的一个维中。然后将数组赋给控件的 ChartData 属性:MSChart1.ChartData = varValues,滚屏就完成了。
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)内容概要:本文介绍了基于神经网络的数据驱动迭代学习控制(ILC)算法,旨在解决具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统中无人车的路径跟踪问题。该方法结合神经网络的学习能力与ILC的迭代优化机制,在无需精确系统模型的前提下,通过多次任务执行不断修正控制输入,以实现对期望轨迹的高精度跟踪。文章详细阐述了算法的设计原理、稳定性分析以及在无人车路径跟踪中的具体实现与仿真验证,展示了其在处理模型不确定性与提升跟踪精度方面的有效性。; 适合人群:具备自动控制、机器人或人工智能基础知识,从事无人车、自动化控制、智能系统研发的研究人员及工程师。; 使用场景及目标:①解决无人车在复杂环境下因系统模型未知或不精确导致的路径跟踪难题;②提升重复性作业中控制系统对理想轨迹的跟踪精度与鲁棒性;③为非线性、不确定性系统的先进控制策略设计提供理论参考与实践案例。; 阅读建议:建议读者结合Matlab代码实现进行学习,重点关注神经网络与ILC的融合机制、控制律的设计过程以及仿真结果的分析,以深入理解数据驱动方法在解决模型未知问题上的优势。
内容概要:本资源聚焦于分数阶系统(FOS)的Lyapunov指数谱计算,涵盖分数阶Lorenz系统、4D分数阶Chen系统和分数阶Duffing振荡器三种典型非线性动力学模型。通过提供完整的Matlab代码实现,系统介绍了分数阶微分方程的数值求解方法、李雅普诺夫指数谱的计算原理与算法流程,旨在帮助研究人员定量分析分数阶系统的混沌特性与动力学行为,为复杂系统的稳定性判定、分岔分析及混沌控制研究提供技术支撑。; 适合人群:具备一定动力系统与数值计算基础,从事非线性科学、混沌理论、分数阶微积分等相关领域研究的硕士、博士研究生及科研人员。; 使用场景及目标:① 学习和掌握分数阶微分方程的数值积分方法(如Adams-Bashforth-Moulton算法);② 深入理解Lyapunov指数谱的物理意义及其在判定系统混沌、稳定与周期运动中的应用;③ 利用提供的Matlab代码对特定分数阶系统进行动力学仿真与分析,复现经典结果或拓展至新的研究对象。; 阅读建议:此资源以Matlab代码为核心,强调理论与实践的紧密结合。使用者应在理解分数阶微积分基本理论和Lyapunov指数计算原理的基础上,仔细研读并调试所提供的代码,通过修改系统参数、初始条件等方式进行探究式学习,从而深化对分数阶系统复杂动力学行为的理解。
代码转载自:https://pan.quark.cn/s/447eda883a93 在本文中,我们将详细研究利用微控制器MSP430F5529来操控MPU6050传感器,并从其输出数据中推算出欧拉角。让我们来熟悉相关的主要构成部分。MSP430F5529是由德州仪器(TI)研发的一款16位超低功耗微控制器,它具备丰富的外部设备接口和强大的处理性能,非常适合多样化的嵌入式系统应用,尤其是传感器监控领域。MPU6050则是InvenSense公司推出的一款六轴惯性测量装置(IMU),该设备集成了三轴陀螺仪和三轴加速度计,能够检测设备的旋转状态和线性运动情况。 **一、MSP430F5529与MPU6050的连接** 1. **I2C通信协议**:MSP430F5529借助I2C总线与MPU6050进行数据交换。在I2C协议框架内,MSP430担任主设备角色,而MPU6050则扮演从设备角色。主设备负责控制数据传输过程,从设备则响应请求并传输数据。 2. **配置MPU6050**:在启动通信流程之前,必须设定MPU6050的工作模式、采样频率、满量程范围等参数。这一过程通常通过发送特定的I2C指令来完成。 3. **数据获取**:MPU6050的陀螺仪和加速度计数据通过I2C接口持续不断地或按需提供。微控制器周期性地读取这些数据,用以监控设备的动态变化情况。 **二、陀螺仪和加速度计原始数据解读** 1. **陀螺仪数据**:陀螺仪测量的是角速度,其单位通常是dps(度/秒)。该数据反映了设备围绕三个正交轴的旋转速度。 2. **加速度计数据**:加速度计测量的是线性加速度,其单位通常是g(重力加速度的倍数)。它能够感知设备在三个正交轴上的静态和动态加速度变化。...

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧