YuTm.com / TTcha.com / Donuo.com / Stm32cube.com / Benmm.com / TTmn.cn / Hplayer.cn / HtmLayout.cn / LoLikong.cn / zuLie.cn


ST-curve波形图ocx控件的试用

By 笑口常开 at 2019-01-29 • 0人收藏 • 442人看过

前面谈到波形图我选择了用百度echarts实现, 最近看到这个控件,于是试了下

ST_Curve是一个专业的曲线绘制控件,只要是xy坐标系的曲线,都可绘制,纵坐标只能显示为值,横坐标可以显示为值或者时间

GIF.gif

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="全屏";left=0;top=428;right=91;bottom=470;db=1;dl=1;z=2};
button2={cls="button";text="非全屏";left=101;top=428;right=192;bottom=470;db=1;dl=1;z=3};
button3={cls="button";text="设置第一个曲线属性";left=370;top=427;right=511;bottom=469;db=1;dl=1;dr=1;z=4};
button4={cls="button";text="绘制实时数据";left=522;top=428;right=613;bottom=470;db=1;dr=1;z=5};
button5={cls="button";text="清空曲线";left=228;top=433;right=347;bottom=468;db=1;dl=1;z=6};
button6={cls="button";text="绘制平移数据";left=641;top=427;right=732;bottom=469;db=1;dr=1;z=7};
picturebox={cls="picturebox";left=37;top=23;right=697;bottom=398;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import console
console.open()
import time.ole;

//我们试一下创建一个OLE时间对象
var tm = time.ole(); 

var stc = winform.picturebox.createEmbed("{315E7F0E-6F9C-41A3-A669-A7E9626D7CA0}");

var m_ST_Curve = stc._object
//console.log( m_ST_Curve.SetMaxLength(1000, 700) )
//设置背景色
m_ST_Curve.setBackColor(0x000000);
//设置
m_ST_Curve.EnableHZoom(true);
//设置波形显示模式
m_ST_Curve.SetShowMode(0x80);
//m_ST_Curve.SetBottomSpace(0);
//m_ST_Curve.EnableFocusState(false);
//设置网格线显示模式
m_ST_Curve.SetGridMode(3);
//m_ST_Curve.SetBeginValue(1.34);	
//m_ST_Curve.SetValueStep( 2.2 );
m_ST_Curve.SetHInterval(10);
//m_ST_Curve.SetTension(0.5)
//设置Y轴标题
m_ST_Curve.SetUnit("温度和湿度")
//m_ST_Curve.SetZoom(0);
//m_ST_Curve.EnableZoom(false);
//m_ST_Curve.SetMoveMode(0);
//限制在一页
m_ST_Curve.LimitOnePage(true);
//不显示预览
m_ST_Curve.EnablePreview(false);
//不提示帮助信息
m_ST_Curve.EnableHelpTip(false);

winform.button.oncommand = function(id,event){
	m_ST_Curve.EnableFullScreen(true);
}

winform.button2.oncommand = function(id,event){
	m_ST_Curve.EnableFullScreen(false);
}

winform.button3.oncommand = function(id,event){
	//m_ST_Curve.AddLegendHelper(10,"第一条曲线",0x00CC00 , 0/*_PS_SOLID*/, 1, true);
	 m_ST_Curve.AddLegend(10,"第一条曲线",0x00CC00 ,0/*_PS_SOLID*/,1,0x0,255,3,2,0xFF,true);
}
var tmId
winform.button4.oncommand = function(id,event){
   var tmn = tonumber(tm)
   var iii = 0;
   
   m_ST_Curve.DelRange2(10,0,-1,false,true);
	//定时器加载数据
   tmId = winform.addtimer( 
   	200,
   	function(hwnd,msg,id,tick){
   		m_ST_Curve.AddMainData2(10, iii, math.random(),0, 1, true);
   		iii++
   	} 
   )
   
/*
//手动加载数据
   for(i=1;50;1){
   	m_ST_Curve.AddMainData2(10, tmn, math.random(),0, 1, true);
   		tmn+= 1.0;
   
   }
*/
   

}

winform.button5.oncommand = function(id,event){
	winform.settimer(tmId,-1)
	winform.killtimer(tmId)
	//m_ST_Curve.DelRange2(10,0,-1,false,true);
}
//var tmid2;
winform.button6.oncommand = function(id,event){
	m_ST_Curve.AddLegend(11,"第一条曲线",0x00CC00 ,0/*_PS_SOLID*/,1,0x0,255,3,2,0xFF,true);
	var jjj = 0;
	
	m_ST_Curve.DelRange2(11,0,-1,false,true);
	
	tmId = winform.addtimer( 
		300,
		function(hwnd,msg,id,tick){
			if(jjj> 30){
				m_ST_Curve.DelRange2(11,0,1,false,true);
			}
			m_ST_Curve.AddMainData2(11, jjj, math.random(),0, 1, true);
   			jjj++;
		} 
	)
	
}

winform.show() 
win.loopMessage();


4 个回复 | 最后更新于 2019-05-18
2019-01-29   #1

绘制圆滑曲线:

m_ST_Curve.SetTension(0.5);//设置曲线张力
m_ST_Curve.AddLegend(10,"第一条曲线",0x00CC00 ,0/*_PS_SOLID*/,1,0x0,255,3,2,0xFF,true);

image.png

2019-05-17   #2

多个波形图联动:

gifTest.gif

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=1358;bottom=806)
winform.add(
picturebox={cls="picturebox";left=0;top=0;right=697;bottom=232;bgcolor=15780518;db=1;dl=1;dr=1;dt=1;z=1};
picturebox2={cls="picturebox";left=0;top=253;right=702;bottom=457;bgcolor=15780518;db=1;dl=1;dr=1;dt=1;z=2};
picturebox3={cls="picturebox";left=0;top=488;right=697;bottom=720;bgcolor=15780518;db=1;dl=1;dr=1;dt=1;z=3};
picturebox4={cls="picturebox";left=743;top=243;right=1359;bottom=475;bgcolor=15780518;db=1;dl=1;dr=1;dt=1;z=4}
)
/*}}*/

import console
console.open()
import time.ole;

import winex

var stc = winform.picturebox.createEmbed("{315E7F0E-6F9C-41A3-A669-A7E9626D7CA0}");
var m_ST_Curve = stc._object
m_ST_Curve.setBackColor(0x000000);
m_ST_Curve.EnableHZoom(true);
m_ST_Curve.SetShowMode(0x80);
m_ST_Curve.SetGridMode(3);
m_ST_Curve.SetHInterval(10);
m_ST_Curve.SetUnit("温度和湿度")
m_ST_Curve.LimitOnePage(true);
m_ST_Curve.EnablePreview(false);
m_ST_Curve.EnableHelpTip(false);
m_ST_Curve.AddLegend(1,"第一条曲线",0x00CC00 ,0/*_PS_SOLID*/,1,0x0,255,3,2,0xFF,true);


var stc2 = winform.picturebox2.createEmbed("{315E7F0E-6F9C-41A3-A669-A7E9626D7CA0}");
var m_ST_Curve2 = stc2._object
m_ST_Curve2.setBackColor(0x000000);
m_ST_Curve2.EnableHZoom(true);
m_ST_Curve2.SetShowMode(0x80);
m_ST_Curve2.SetGridMode(3);
m_ST_Curve2.SetHInterval(10);
m_ST_Curve2.SetUnit("温度和湿度")
m_ST_Curve2.LimitOnePage(true);
m_ST_Curve2.EnablePreview(false);
m_ST_Curve2.EnableHelpTip(false);
m_ST_Curve2.AddLegend(2,"第一条曲线",0x00CC00 ,0/*_PS_SOLID*/,1,0x0,255,3,2,0xFF,true);

m_ST_Curve.EnableFocusState(false);
m_ST_Curve2.EnableFocusState(false);

//查找控件句柄
var hwnd = winex.findEx(,,'AfxWn',"")
//设置联动
m_ST_Curve2.SetBuddy(hwnd, 0);

for(i=1;50;1){
	m_ST_Curve.AddMainData2(1, i, math.random(),0, 1, true);
	m_ST_Curve2.AddMainData2(2, i, math.random(),0, 1, true);
}

 
winform.show() 
win.loopMessage();

虽然实现了功能, 但是总感觉哪里不对, 应该是绕远路了, 按道理说自己创建的控件和窗体 ,应该有方式很容易取得这个com控件的句柄的,不需要winex这个扩展库.

2019-05-17   #3

科技感的背景色和线条颜色

//设置背景色
m_ST_Curve.setBackColor(0x663202);
m_ST_Curve.AddLegend(11,"功率曲线",0xFFD859 ,0/*_PS_SOLID*/,1,0x0,255,3,0,0xFF,true);

image.png

2019-05-18   #4

更新下: 经过校长的指点 修改上面的查找波形图控件代码如下:

var getStCurveHwnd = function( formHwnd ){
	var hView = win.findEx(formHwnd,0);
	if( hView ){
		return win.getChild(hView); 
	}else {
		return null; 
	}	
}

//这样使用
var m_hwnd = getStCurveHwnd( winform.picturebox.hwnd );
if(m_hwnd){
	//设置联动
	m_ST_Curve2.SetBuddy(m_hwnd, 0);
}

winform.button.oncommand = function(id,event){
	if(m_hwnd){
		//解除所有联动
		m_ST_Curve2.SetBuddy(0, 1);
		//解除辅机联动, 保留主机联动
		//m_ST_Curve2.SetBuddy(m_hwnd, 1);
	}
}


下面写一写这样写思考和学习的过程:

校长说: 

你自己创建的窗口是 winform.picturebox.hwnd

com控件的窗口准确说是com控件创建的,每个com控件创建的窗口结构都不相同,有的有好几层父子窗口,所以你要根据情况自己去获取。

因为com控件创建的窗口总是你创建的窗口的子窗口,所以可以用 win.findEx,win.eachChild等函数去找。

可以参数 web.form也是这样实现的

web.form.hwndControl = {
	_get = function(){ 
	    owner.wait()
	    var hView = ..win.findEx(owner.hwndEmbedding,0,"Shell DocObject View")
	    || ..win.findEx(owner.hwndEmbedding,0,"SHELLDLL_DefView");
	    if( hView ) return ..win.getChild(hView); 
    } 	
};


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...