⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 realtime.pas

📁 Delphi Component - Chart Fx
💻 PAS
字号:
unit realtime;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  OleCtrls, ChartfxLib_TLB, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ChartFX1: TChartFX;
    ChartFX2: TChartFX;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Timer1: TTimer;
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure AddOnePoint;
    procedure CheckBox1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nOffset:LongInt;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);
begin
    //set and initialize the buffer of values for this real time chart
    ChartFX1.MaxValues := 20;
    ChartFX1.OpenDataEx(COD_VALUES or COD_REMOVE, 2, 20);
    ChartFX1.CloseData(COD_VALUES);

    ChartFX2.MaxValues := 20;
    ChartFX2.OpenDataEx(COD_VALUES or COD_REMOVE, 2, 20);
    ChartFX2.CloseData(COD_VALUES);

    // Optimize scrolling. These lines will make the chart scroll faster.
    ChartFX1.TypeMask := ChartFX1.TypeMask Or CT_EVENSPACING;
    ChartFX2.TypeMask := ChartFX2.TypeMask Or CT_EVENSPACING;

    nOffset := 0;
    ChartFX1.RealTimeStyle := CRT_LOOPPOS Or CRT_NOWAITARROW;
    ChartFX2.RealTimeStyle := CRT_LOOPPOS Or CRT_NOWAITARROW;
    ChartFX2.TypeEx := ChartFX2.TypeEx Or CTE_NOLEGINVALIDATE;
end;

procedure TForm1.AddOnePoint;
VAR
   nCOD : CfxCod;
   s: String;
Begin
    // Switch realtime styles when the end of the
    If nOffset = 20 Then begin
    	ChartFX1.RealTimeStyle := CRT_NOWAITARROW;
        ChartFX1.Refresh;
        ChartFX2.RealTimeStyle := CRT_NOWAITARROW;
        ChartFX2.Refresh;
    End;

    nCOD := COD_VALUES Or COD_REALTIME;

    //insert one point from the left in realtime for each series
    ChartFX1.OpenDataEx(COD_VALUES Or COD_INSERTPOINTS, 2, 1);
        ChartFX1.ValueEx[0, 0] := -50 + Random(100);
        ChartFX1.ValueEx[1, 0] := -50 + Random(100);
    ChartFX1.CloseData(nCOD);

    // Scroll x-axis labels too
    If CheckBox2.Checked Then Begin
        nCOD := nCOD Or COD_SCROLLLEGEND;
        Str(nOffset,s);
        If nOffset >= 20 Then begin // Eliminate first (scroll) and add one at the end
            ChartFX2.Legend[0] := '';
            ChartFX2.Legend[19] := s;
        end
        Else
            ChartFX2.Legend[nOffset] := s;
    End;

    // add one point from the right in realtime for each series
    ChartFX2.OpenDataEx(COD_VALUES Or COD_ADDPOINTS, 2, 1);
        ChartFX2.ValueEx[0, 0] := -50 + Random(100);
        ChartFX2.ValueEx[1, 0] := -50 + Random(100);
    ChartFX2.CloseData(nCOD);

    // Next
    nOffset := nOffset + 1;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
	Timer1.Enabled := CheckBox1.Checked;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     AddOnePoint;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     AddOnePoint;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -