📄 realtime.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 + -