• Delphi Prism的Silverlight试用(2)RealTime Chart


    参考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.

  • 相关阅读:
    ABAP开发常见任务
    sap smartform 打印乱码问题
    根据T-Code查看用户出口的代码
    java 调用SAP RFC函数错误信息
    代码单行超过72个字符的一个异常
    SAP 权限层次
    标准屏幕字段描述修改
    [转]SAP一句话入门SD模块
    Python3.7,os模块
    Python3,逻辑运算符
  • 原文地址:https://www.cnblogs.com/WASPCN/p/1358856.html
Copyright © 2020-2023  润新知