C#的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Visifire.Charts;
using Visifire.Commons;
namespace RealTime
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
InitializeData();
}
void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
_timer.Start();
}
private Double[] UpdateData()
{
Random rand = new Random();
Int32 i;
for (i = 0; i < _data.Length - 1; i++)
{
_data[i] = _data[i + 1];
}
if (!_oddState)
{
_oddState = true;
_data[i] = rand.Next(0, 100);
}
else
{
_oddState = false;
_data[i] = -_data[i];
}
return _data;
}
void _timer_Tick(object sender, EventArgs e)
{
UpdateData();
for (Int32 i = 0; i < _data.Length; i++)
{
_chart2.Series[0].DataPoints[i].YValue = _data[i];
}
_chart1.Series[0].DataPoints[0].YValue = Math.Abs(_data[_data.Length - 1]);
_chart1.Titles[0].Text = Convert.ToString(Math.Abs(_data[_data.Length - 1])) + "%";
}
private void InitializeData()
{
CreateColumnChart();
CreateLineChart();
_timer.Tick += new EventHandler(_timer_Tick);
_timer.Interval = TimeSpan.FromSeconds(1);
LayoutRoot.Loaded += new RoutedEventHandler(LayoutRoot_Loaded);
}
private void CreateLineChart()
{
_chart2 = new Chart();
_chart2.Width = 200;
_chart2.Height = 120;
_chart2.AnimationEnabled = false;
_chart2.ScrollingEnabled = false;
_chart2.Watermark = false;
_chart2.Background = new SolidColorBrush(Colors.Black);
Axis axisX = new Axis();
axisX.AxisLabels.Enabled = false;
ChartGrid gridX = new ChartGrid();
gridX.LineColor = new SolidColorBrush(Color.FromArgb((Byte)0xff, (Byte)0x00, (Byte)0x80, (Byte)0x40));
gridX.LineThickness = 1;
axisX.Grids.Add(gridX);
Ticks tickX = new Ticks();
tickX.Enabled = false;
axisX.Ticks.Add(tickX);
_chart2.AxesX.Add(axisX);
Axis axisY = new Axis();
axisY.AxisMinimum = -100;
axisY.AxisMaximum = 100;
axisY.AxisLabels.Enabled = false;
ChartGrid gridY = new ChartGrid();
gridY.LineColor = new SolidColorBrush(Color.FromArgb((Byte)0xff, (Byte)0x00, (Byte)0x80, (Byte)0x40));
gridY.LineThickness = 1;
axisY.Grids.Add(gridY);
Ticks tickY = new Ticks();
tickY.Enabled = false;
axisY.Ticks.Add(tickY);
_chart2.AxesY.Add(axisY);
_chart2.Series.Add(new DataSeries() { RenderAs = RenderAs.Line });
_chart2.Series[0].Color = new SolidColorBrush(Color.FromArgb((Byte)0xff, (Byte)0x00, (Byte)0xff, (Byte)0x00));
for (Int32 i = 0; i < _data.Length; i++)
_chart2.Series[0].DataPoints.Add(new DataPoint());
ChartGrid2.Children.Add(_chart2);
}
private void CreateColumnChart()
{
_chart1 = new Chart();
_chart1.Width = 70;
_chart1.Height = 120;
_chart1.AnimationEnabled = false;
_chart1.Watermark = false;
_chart1.Background = new SolidColorBrush(Colors.Black);
Axis axisX = new Axis();
axisX.Enabled = false;
_chart1.AxesX.Add(axisX);
Axis axisY = new Axis();
axisY.Enabled = false;
ChartGrid grid = new ChartGrid();
grid.Enabled = false;
axisY.Grids.Add(grid);
_chart1.AxesY.Add(axisY);
Title title = new Title();
title.VerticalAlignment = VerticalAlignment.Bottom;
title.FontColor = new SolidColorBrush(Colors.White);
_chart1.Titles.Add(title);
_chart1.Series.Add(new DataSeries() { RenderAs = RenderAs.Column });
_chart1.Series[0].Color = new SolidColorBrush(Color.FromArgb((Byte)0xff, (Byte)0x00, (Byte)0xff, (Byte)0x00));
_chart1.Series[0].DataPoints.Add(new DataPoint());
ChartGrid1.Children.Add(_chart1);
}
Chart _chart1;
Chart _chart2;
Double[] _data = new Double[20];
System.Windows.Threading.DispatcherTimer _timer = new System.Windows.Threading.DispatcherTimer();
Boolean _oddState = false;
}
}
Delphi Prism的代码:
namespace RealTime;
interface
uses
System,
System.Collections.Generic,
System.Linq,
System.Windows,
System.Windows.Controls,
System.Windows.Documents,
System.Windows.Ink,
System.Windows.Input,
System.Windows.Media,
System.Windows.Media.Animation,
System.Windows.Shapes,
Visifire.Charts,
Visifire.Commons;
type
TDlAry=Array of Double;
type
Page = public partial class(System.Windows.Controls.UserControl)
private
_chart1,_chart2:Chart;
_data :TDlAry; //Double[];
_timer : System.Windows.Threading.DispatcherTimer;
_oddState :Boolean;
method _timer_Tick(sender:System.Object; e:System.EventArgs);
method LayoutRoot_Loaded(sender:System.Object; e:RoutedEventArgs);
Procedure InitializeData();
Procedure CreateLineChart();
Procedure CreateColumnChart();
function UpdateData() : TDlAry;
public
constructor;
end;
implementation
constructor Page;
begin
InitializeComponent();
InitializeData();
end;
Procedure Page.InitializeData();
Begin
_data := new Double[20];
_timer := new System.Windows.Threading.DispatcherTimer();
_oddState := false;
CreateColumnChart();
CreateLineChart();
_timer.Tick += new System.EventHandler(@_timer_Tick);
_timer.Interval := TimeSpan.FromSeconds(1);
LayoutRoot.Loaded += new RoutedEventHandler(@LayoutRoot_Loaded);
end;
method Page.LayoutRoot_Loaded(sender:System.Object; e:RoutedEventArgs);
Begin
_timer.Start();
end;
function Page.UpdateData():TDlAry;
var
rand:Random;
i:Int32;
Begin
rand:= new Random();
for i := 0 to _data.Length - 2 do
begin
_data[i] := _data[i + 1];
end;
if (_oddState=false) then
begin
_oddState := true;
_data[i] := rand.Next(0, 100);
end
else
begin
_oddState := false;
_data[i] := -_data[i];
end;
Result:= _data;
End;
method Page._timer_Tick(sender:System.Object; e:System.EventArgs);
var
i :Int32;
begin
UpdateData();
for i := 0 to _data.Length-1 do
begin
_chart2.Series[0].DataPoints[i].YValue := _data[i];
end;
_chart1.Series[0].DataPoints[0].YValue := Math.Abs(_data[_data.Length - 1]);
_chart1.Titles[0].Text := Convert.ToString(Math.Abs(_data[_data.Length - 1])) + "%";
end;
Procedure Page.CreateLineChart();
var
i:Int32;
axisX,axisY:Axis;
gridX,gridY:ChartGrid;
tickX,tickY:Ticks;
dataSeries:DataSeries;
begin
_chart2 := new Chart();
_chart2.Width := 200;
_chart2.Height := 120;
_chart2.AnimationEnabled := false;
_chart2.ScrollingEnabled := false;
_chart2.Watermark := false;
_chart2.Background := new SolidColorBrush(Colors.Black);
axisX := new Axis();
axisX.AxisLabels.Enabled := false;
gridX := new ChartGrid();
gridX.LineColor := new SolidColorBrush(Color.FromArgb(Byte($FF), Byte($00), Byte($80), Byte($40)));
gridX.LineThickness := 1;
axisX.Grids.Add(gridX);
tickX := new Ticks();
tickX.Enabled := false;
axisX.Ticks.Add(tickX);
_chart2.AxesX.Add(axisX);
axisY := new Axis();
axisY.AxisMaximum:= 100.0;
axisY.AxisMinimum := -100.0;
axisY.AxisLabels.Enabled := false;
gridY := new ChartGrid();
gridY.LineColor := new SolidColorBrush(Color.FromArgb(Byte($FF), Byte($00), Byte($80), Byte($40)));
gridY.LineThickness := 1;
axisY.Grids.Add(gridY);
tickY := new Ticks();
tickY.Enabled := false;
axisY.Ticks.Add(tickY);
_chart2.AxesY.Add(axisY);
dataSeries:=new DataSeries();
dataSeries.RenderAs := RenderAs.Line;
_chart2.Series.Add(dataSeries);
_chart2.Series[0].Color := new SolidColorBrush(Color.FromArgb(Byte($FF), Byte($00),Byte($FF), Byte($00)));
for i := 0 to _data.Length-1 do
_chart2.Series[0].DataPoints.Add(new DataPoint());
ChartGrid2.Children.Add(_chart2);
end;
Procedure Page.CreateColumnChart();
var
axisX,axisY:Axis;
grid:ChartGrid;
title:Title;
dataSeries:DataSeries;
begin
_chart1 := new Chart();
_chart1.Width := 70;
_chart1.Height := 120;
_chart1.AnimationEnabled := false;
_chart1.Watermark := false;
_chart1.Background := new SolidColorBrush(Colors.Black);
axisX := new Axis();
axisX.Enabled := false;
_chart1.AxesX.Add(axisX);
axisY := new Axis();
axisY.AxisMaximum:= 100.0;
axisY.AxisMinimum := 0.0;
axisY.Enabled := false;
grid := new ChartGrid();
grid.Enabled := false;
axisY.Grids.Add(grid);
_chart1.AxesY.Add(axisY);
title := new Title();
title.VerticalAlignment := VerticalAlignment.Bottom;
title.FontColor := new SolidColorBrush(Colors.White);
_chart1.Titles.Add(title);
dataSeries:=new DataSeries();
dataSeries.RenderAs := RenderAs.Column;
_chart1.Series.Add(dataSeries);
_chart1.Series[0].Color := new SolidColorBrush(Color.FromArgb(Byte($FF), Byte($00),Byte($FF), Byte($00)));
_chart1.Series[0].DataPoints.Add(new DataPoint());
ChartGrid1.Children.Add(_chart1);
end;
end.