HreoWinGauge2.0 试用版下载地址:http://download.csdn.net/source/6896899
HreoWinGauge中包含一个功能齐全的数据处理模块,具有对数据进行输入输出、记录、回放、数学计算等处理功能。具体介绍参考《HreoWinGauge2.0组件集使用手册》。本示例将在上一节数据输入输出示例的基础上,演示如何应用数据处理模块的记录、回放功能。
(1)设置组件的自动记录输入数据功能
在上一节数据输入输出示例中,已创建一个命名为TestValueProcessor的窗体,并已将左右两个CircularPointer关联起来。用鼠标点击GaugeContainer对象右上角的三角形智能标记,弹出智能操作面板,点击“Task for selectded object” 选项卡中的“Edit”选项,此时打开一个“Gauge Container Editor”对话框。对话框上部显示有此对象的类型(GaugeContainer)和名称(gaugeContainer1)。在此对话框中找到ValueProcessors属性,然后点击其右侧的属性值框内的“...”按钮,弹出一个“ValueProcessor Collection Editor”对话框(见图7.9-1)。此对话框可对ValueProcessors集合进行各种编辑。点击ValueProcessor0对象,然后在右侧的属性编辑器内设置该ValueProcessor对象的内部属性:“HistoryDepth”设定为“10”;“HistoryDepthUnit”设为“Seconds”。然后点击OK按钮退出修改。此设置表示ValueProcessor0可以自动记录最近10秒钟的输入数据,可作为回放时输出使用。
图7.9-1 Gauge Container Editor窗体1
(2)添加和设置各种数据计算器
在图7.9-1 ValueProcessor Collection Editor窗体中找到ValueCalculators属性,用鼠标点击其右侧的属性值框内的“...”按钮,弹出一个“ValueCalculator Collection Editor”对话框(见图7.9-2)。此对话框可对ValueCalculators集合进行各种编辑。点击“Add”按钮添加各种ValueCalculator对象到对话框左侧的“Members”列举项中,并在对话框右侧的属性编辑器内设置各对象的内部属性。设置内容如下:
CorrectingValueCalculator0:“Type”设为“Unchange”;“Enable”设为“True”。
MathValueCalculator2:“Type”设为“RateOfChange”;“ValueDepth”设为“2”;“ValueDepthUnit”设为“Seconds”;“Enable”设为“True”。
图7.9-2 ValueCalculator Collection Editor窗体1
(3)设置圆形旋钮和圆形指针为接收回放数据
直接点击左侧圆形旋钮对象CircularPointer0区域,此时该对象将出现矩形选择框,然后点击右上角的三角形智能标记,弹出智能操作面板,点击“Task for selectded object”选项卡中的“Edit”选项,此时打开一个“Gauge Object Editor”对话框(见图7.8-6)。找到该CircularPointer0对象的内部属性:“ValueSource”设为“ValueProcessor0\CorrectingValueCalculator0”。此设置表示,数据处理器ValueProcessor0中CorrectingValueCalculator0的输出数据将送到此圆形旋钮中显示。
同理将右侧CircularPointer1对象的ValueSource”设为“ValueProcessor0\MathValueCalculator2”。
(4)添加各种回放功能按钮
在TestValueProcessor窗体右侧添加4个功能按钮(见图7.9-4),分别为:Playback、Pause、Resume、Stop,并添加相应的Click事件响应函数。
图7.9-4 TestValueProcessor窗体1
程序清单如下:
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// add namespace
using HeroWinGauge;
namespace HeroWinGaugeSamples
{
public partial class TestValueProcessor : Form
{
private ValueProcessor vp;
private CircularPointer cp;
public TestValueProcessor()
{
InitializeComponent();
}
private void TestValueProcessor_Load(object sender, EventArgs e)
{
cp = (HeroWinGauge.CircularPointer)gaugeContainer1.GaugeComponents[0].MiddleLayerParts[0];
vp = gaugeContainer1.ValueProcessors[0];
}
private void btnPlayback_Click(object sender, EventArgs e)
{
cp.DraggingEnable = false; // must set false first for plackback;
if (!vp.StartPlayback())
{
MessageBox.Show("Error in starting playback!");
cp.DraggingEnable = true; // if playback false or over,then reset to true for enable dragging
}
}
private void btnPause_Click(object sender, EventArgs e)
{
if (!vp.PausePlayback())
{
MessageBox.Show("Error in pausing playback!");
}
}
private void btnResume_Click(object sender, EventArgs e)
{
if (!vp.ResumePlayback())
{
MessageBox.Show("Error in resuming playback!");
}
}
private void btnStop_Click(object sender, EventArgs e)
{
vp.StopPlayback();
}
private void gaugeContainer1_ProcessorPlaybackStateChanged(object sender, PlaybackStateChangedEventArgs e)
{
switch (e.PlaybackState)
{
case (OperatingState.Started):
btnPlayback.Enabled = false;
btnPause.Enabled = true;
btnResume.Enabled = false;
btnStop.Enabled = true;
break;
case (OperatingState.Paused):
btnPlayback.Enabled = false;
btnPause.Enabled = false;
btnResume.Enabled = true;
btnStop.Enabled = true;
break;
case (OperatingState.Resumed):
btnPlayback.Enabled = false;
btnPause.Enabled = true;
btnResume.Enabled = false;
btnStop.Enabled = true;
break;
case (OperatingState.Stopped):
case (OperatingState.Complete):
btnPlayback.Enabled = true;
btnPause.Enabled = false;
btnResume.Enabled = false;
btnStop.Enabled = false;
cp.DraggingEnable = true; // if playback false or over,then reset to true for enable dragging
break;
default:
break;
}
}
}
以上程序中各按钮的功能如下:
Playback按钮:开始进行回放操作,ValueProcessor0进入数据回放状态,左右两个圆形指针将重现此前10秒种的转动过程。
Pause按钮:暂停当前正在回放操作,ValueProcessor0进入数据回放暂停状态,左右两个圆形指针将暂停回放转动过程。此时可使用Resume按钮恢复已暂停的回放操作。
Resume按钮:恢复已暂停的回放操作,ValueProcessor0重新进入数据回放状态,左右两个圆形指针继续回放转动过程。
Stop按钮:停止当前正在进行回放操作,ValueProcessor0进入数据回放停止状态,左右两个圆形指针将停止回放转动。此时可使用PlayBack按钮重新开始回放操作。
(5)数据记录回放过程总结
1)记录和计算输出过程
当用鼠标拖动左侧圆形旋钮时,相当于输入CircularPointer0的Value值,同时将当前Value值送往CircularPointer0.OuputProcessor属性指定的数据处理器ValueProcessor0中,ValueProcessor0首先将输入的数据保存到历史记录缓冲区中,然后将数据送到ValueProcessor0.ValueCalculators中的各种数据计算器进行运算处理,最后将各计算结果送往相应的图形类指针对象进行输出显示。图形类指针对象可以通过设定其ValueSource属性来指定数据输入源,例如:ValueProcessor0\MathValueCalculator2 。
注意:记录过程中,尽管CircularPointer0也设置了ValueSource为ValueProcessor0的数据计算器,但CircularPointer0输出的数据,经数据处理器ValueProcessor0处理计算后,输出的数据并没有重新回到该CircularPointer0,这是由于HreoWinGauge中已限定输出数据的对象不能同时成为输入数据的对象。
2)回放和计算输出过程
当点击Playback按钮后,ValueProcessor0进入数据回放状态,并拒绝外部数据输入。ValueProcessor0开始从历史记录缓冲区中按先进先出顺序取出数据,送到ValueProcessor0.ValueCalculators中的各种数据计算器进行运算处理,最后将各计算结果送往相应的图形类指针对象进行输出显示。图形类指针对象可以通过设定其ValueSource属性来指定数据输入源,例如:ValueProcessor0\MathValueCalculator2 。
回放过程中可以暂停、恢复和停止。当历史记录缓冲区中所有数据取出处理后,回放操作结束,ValueProcessor0退出回放状态,重新允许外部数据输入。