diff --git a/components/tachart/demo/line/Main.lfm b/components/tachart/demo/line/Main.lfm index 3709a535de..bf4bb72d74 100644 --- a/components/tachart/demo/line/Main.lfm +++ b/components/tachart/demo/line/Main.lfm @@ -1,32 +1,33 @@ object Form1: TForm1 - Left = 647 + Left = 605 Height = 479 Top = 364 - Width = 645 + Width = 691 Caption = 'Form1' ClientHeight = 479 - ClientWidth = 645 + ClientWidth = 691 OnCreate = FormCreate Position = poScreenCenter LCLVersion = '0.9.31' - object PageControl2: TPageControl + object PageControl1: TPageControl Left = 0 Height = 479 Top = 0 - Width = 645 + Width = 691 ActivePage = tsFast Align = alClient TabIndex = 0 TabOrder = 0 + OnChange = PageControl1Change object tsFast: TTabSheet Caption = 'Fast drawing' ClientHeight = 453 - ClientWidth = 637 + ClientWidth = 683 object chFast: TChart Left = 0 Height = 415 Top = 38 - Width = 637 + Width = 683 AxisList = < item Minors = <> @@ -64,10 +65,10 @@ object Form1: TForm1 Left = 0 Height = 38 Top = 0 - Width = 637 + Width = 683 Align = alTop ClientHeight = 38 - ClientWidth = 637 + ClientWidth = 683 TabOrder = 1 object cbLineType: TComboBox Left = 8 @@ -153,12 +154,12 @@ object Form1: TForm1 object tsPointers: TTabSheet Caption = 'Pointers' ClientHeight = 453 - ClientWidth = 637 + ClientWidth = 683 object chPointers: TChart Left = 0 Height = 453 Top = 0 - Width = 467 + Width = 513 AxisList = < item Minors = <> @@ -181,7 +182,7 @@ object Form1: TForm1 ParentColor = False end object pnlPointers: TPanel - Left = 467 + Left = 513 Height = 453 Top = 0 Width = 170 @@ -208,6 +209,51 @@ object Form1: TForm1 end end end + object tsOscilloscope: TTabSheet + Caption = 'Oscilloscope' + ClientHeight = 453 + ClientWidth = 683 + object chOscillator: TChart + Left = 0 + Height = 453 + Top = 0 + Width = 683 + AxisList = < + item + Grid.Color = clMedGray + Minors = <> + Range.Max = 2 + Range.Min = -2 + Range.UseMax = True + Range.UseMin = True + Title.LabelFont.Orientation = 900 + end + item + Grid.Color = clMedGray + Alignment = calBottom + Minors = <> + Transformations = catOscillator + end> + BackColor = clBlack + Foot.Brush.Color = clBtnFace + Foot.Font.Color = clBlue + Title.Brush.Color = clBtnFace + Title.Font.Color = clBlue + Title.Text.Strings = ( + 'TAChart' + ) + Align = alClient + DoubleBuffered = True + ParentColor = False + object chOscillatorLineSeries1: TLineSeries + AxisIndexX = 1 + LinePen.Color = clLime + LinePen.Width = 2 + LineType = ltStepXY + Source = lcsOscillator + end + end + end end object RandomChartSource1: TRandomChartSource PointsNumber = 25 @@ -254,4 +300,24 @@ object Form1: TForm1 left = 464 top = 160 end + object lcsOscillator: TListChartSource + DataPoints.Strings = ( + '0|0|?|' + ) + left = 464 + top = 316 + end + object timOscilloscope: TTimer + Enabled = False + Interval = 150 + OnTimer = timOscilloscopeTimer + left = 408 + top = 376 + end + object catOscillator: TChartAxisTransformations + left = 464 + top = 376 + object catOscillatorLinearAxisTransform1: TLinearAxisTransform + end + end end diff --git a/components/tachart/demo/line/Main.pas b/components/tachart/demo/line/Main.pas index b312b568f9..a6525d2bd5 100644 --- a/components/tachart/demo/line/Main.pas +++ b/components/tachart/demo/line/Main.pas @@ -6,7 +6,8 @@ interface uses Classes, ComCtrls, ExtCtrls, Spin, StdCtrls, SysUtils, FileUtil, Forms, - Controls, Graphics, Dialogs, TAGraph, TASeries, TASources, TATools; + Controls, Graphics, Dialogs, TAGraph, TASeries, TASources, TATools, + TATransformations, TACustomSeries; type @@ -15,6 +16,7 @@ type TForm1 = class(TForm) btnAddSeries: TButton; btnRefresh: TButton; + catOscillatorLinearAxisTransform1: TLinearAxisTransform; cb3D: TCheckBox; cbLineType: TComboBox; cbRotated: TCheckBox; @@ -22,6 +24,9 @@ type ccsAvg: TCalculatedChartSource; ccsDerivative: TCalculatedChartSource; ccsSum: TCalculatedChartSource; + catOscillator: TChartAxisTransformations; + chOscillator: TChart; + chOscillatorLineSeries1: TLineSeries; chPointers: TChart; chFast: TChart; chFastConstantLine1: TConstantLine; @@ -33,11 +38,14 @@ type edTime: TEdit; lblPointerSize: TLabel; lblPointsCount: TLabel; - PageControl2: TPageControl; + lcsOscillator: TListChartSource; + PageControl1: TPageControl; Panel1: TPanel; pnlPointers: TPanel; RandomChartSource1: TRandomChartSource; sePointerSize: TSpinEdit; + timOscilloscope: TTimer; + tsOscilloscope: TTabSheet; tsPointers: TTabSheet; tsFast: TTabSheet; procedure btnAddSeriesClick(Sender: TObject); @@ -47,7 +55,9 @@ type procedure cbRotatedChange(Sender: TObject); procedure cbSortedChange(Sender: TObject); procedure FormCreate(Sender: TObject); + procedure PageControl1Change(Sender: TObject); procedure sePointerSizeChange(Sender: TObject); + procedure timOscilloscopeTimer(Sender: TObject); end; var @@ -151,6 +161,11 @@ begin end; end; +procedure TForm1.PageControl1Change(Sender: TObject); +begin + timOscilloscope.Enabled := PageControl1.ActivePage = tsOscilloscope; +end; + procedure TForm1.sePointerSizeChange(Sender: TObject); var ls: TLineSeries; @@ -162,5 +177,23 @@ begin end; end; +procedure TForm1.timOscilloscopeTimer(Sender: TObject); +var + rp: TChartRenderingParams; +begin + rp := chOscillator.RenderingParams; + with chOscillatorLineSeries1 do begin + Add(Sin(GetXMax / 20) + Random - 0.5); + if Count > 20 then + ListSource.Delete(0); + // Allow to zoom into various parts of the chart + // while preserving "oscilloscope" behaviour. + catOscillatorLinearAxisTransform1.Offset := -GetXMin; + end; + // Transformation change resets logical extent. + // We know the old extent is safe to keep, so restore it. + chOscillator.RenderingParams := rp; +end; + end. diff --git a/components/tachart/demo/line/linedemo.lpi b/components/tachart/demo/line/linedemo.lpi index e56d9caf01..20b8cfe372 100644 --- a/components/tachart/demo/line/linedemo.lpi +++ b/components/tachart/demo/line/linedemo.lpi @@ -68,6 +68,10 @@ + + + +