WASPCN  
参考visifire的帮助,完成了RealTime Chart的例子。


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.

posted on 2008-12-20 11:40  WASPCN  阅读(1048)  评论(1编辑  收藏  举报