From 0642c65d04dd8fc986ddab8a463ffa0043cf4610 Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Sat, 17 Feb 2024 15:59:27 +0100 Subject: [PATCH] TAChart: Add demo for AxisClickTool --- .../axisclicktool/ChartAxisClickTool_Demo.lpi | 78 +++++ .../axisclicktool/ChartAxisClickTool_Demo.lpr | 25 ++ .../tachart/demo/axisclicktool/main.lfm | 266 ++++++++++++++++++ .../tachart/demo/axisclicktool/main.pas | 100 +++++++ 4 files changed, 469 insertions(+) create mode 100644 components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpi create mode 100644 components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpr create mode 100644 components/tachart/demo/axisclicktool/main.lfm create mode 100644 components/tachart/demo/axisclicktool/main.pas diff --git a/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpi b/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpi new file mode 100644 index 0000000000..a7d39c065c --- /dev/null +++ b/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpi @@ -0,0 +1,78 @@ + + + + + + + + + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="TAChartLazarusPkg"/> + </Item> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="ChartAxisClickTool_Demo.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="main.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="ChartAxisClickTool_Demo"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpr b/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpr new file mode 100644 index 0000000000..95e807f075 --- /dev/null +++ b/components/tachart/demo/axisclicktool/ChartAxisClickTool_Demo.lpr @@ -0,0 +1,25 @@ +program ChartAxisClickTool_Demo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX} + cthreads, + {$ENDIF} + {$IFDEF HASAMIGA} + athreads, + {$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, tachartlazaruspkg, main + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource:=True; + Application.Scaled:=True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/tachart/demo/axisclicktool/main.lfm b/components/tachart/demo/axisclicktool/main.lfm new file mode 100644 index 0000000000..c8f011d4e0 --- /dev/null +++ b/components/tachart/demo/axisclicktool/main.lfm @@ -0,0 +1,266 @@ +object Form1: TForm1 + Left = 381 + Height = 401 + Top = 250 + Width = 729 + Caption = 'Chart Axis Click Tool Demo' + ClientHeight = 401 + ClientWidth = 729 + LCLVersion = '3.99.0.0' + object Chart: TChart + Left = 0 + Height = 353 + Top = 0 + Width = 729 + AxisList = < + item + Grid.Color = 12040191 + Grid.Style = psSolid + AtDataOnly = True + AxisPen.Color = clRed + AxisPen.Visible = True + Group = 1 + Marks.LabelFont.Color = clRed + Marks.AtDataOnly = True + Marks.LabelBrush.Style = bsClear + Minors = <> + Title.LabelFont.Color = clRed + Title.LabelFont.Orientation = 900 + Title.Visible = True + Title.Caption = 'Left axis #1' + Title.LabelBrush.Style = bsClear + Title.PositionOnMarks = True + Transformations = RedAxisTransformations + end + item + Grid.Color = clSilver + Grid.Style = psSolid + Alignment = calBottom + Marks.LabelBrush.Style = bsClear + Minors = <> + Title.Visible = True + Title.Caption = 'Bottom axis' + Title.LabelBrush.Style = bsClear + end + item + Grid.Color = clSilver + Grid.Visible = False + Alignment = calRight + AxisPen.Visible = True + Marks.LabelBrush.Style = bsClear + Minors = <> + Title.LabelFont.Orientation = 450 + Title.Visible = True + Title.Caption = 'Right axis' + Title.LabelBrush.Style = bsClear + end + item + Grid.Color = 16765650 + Grid.Style = psSolid + AtDataOnly = True + AxisPen.Color = clBlue + AxisPen.Visible = True + Group = 1 + Marks.LabelFont.Color = clBlue + Marks.AtDataOnly = True + Marks.LabelBrush.Style = bsClear + Minors = <> + Title.LabelFont.Color = clBlue + Title.LabelFont.Orientation = 900 + Title.Visible = True + Title.Caption = 'Left axis #2' + Title.LabelBrush.Style = bsClear + Title.PositionOnMarks = True + Transformations = BlueAxisTransformations + end> + Frame.Visible = False + Title.Text.Strings = ( + 'Click on various parts of the axes' + 'Colliding parts are detected in the order of the series (left#1-bottom-right-left#2)' + ) + Title.Visible = True + Toolset = ChartToolset + Align = alClient + object RedSeries: TLineSeries + AxisIndexY = 0 + LinePen.Color = clRed + Source = RedChartSource + end + object BlueSeries: TLineSeries + AxisIndexY = 3 + LinePen.Color = clBlue + Source = BlueChartSource + end + end + object BottomPanel: TPanel + Left = 6 + Height = 36 + Top = 359 + Width = 717 + Align = alBottom + AutoSize = True + BorderSpacing.Around = 6 + BevelOuter = bvNone + ClientHeight = 36 + ClientWidth = 717 + TabOrder = 1 + object Label1: TLabel + AnchorSideLeft.Control = BottomPanel + AnchorSideTop.Control = BottomPanel + Left = 0 + Height = 15 + Top = 0 + Width = 65 + Caption = 'Clicked axis:' + end + object Label2: TLabel + AnchorSideLeft.Control = BottomPanel + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 0 + Height = 15 + Top = 19 + Width = 66 + BorderSpacing.Top = 4 + Caption = 'Clicked part:' + end + object lblClickedAxis: TLabel + AnchorSideLeft.Control = Label1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + Left = 73 + Height = 15 + Top = 0 + Width = 36 + BorderSpacing.Left = 8 + Caption = '(none)' + Font.Style = [fsBold] + ParentFont = False + end + object lblClickedAxisPart: TLabel + AnchorSideLeft.Control = Label1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label2 + Left = 73 + Height = 15 + Top = 19 + Width = 36 + BorderSpacing.Left = 8 + Caption = '(none)' + Font.Style = [fsBold] + ParentFont = False + end + object cbShowGrid_LeftAxis2: TCheckBox + AnchorSideLeft.Control = Bevel1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrCenter + Left = 360 + Height = 19 + Top = -2 + Width = 130 + Caption = 'Show left axis #2 grid' + Checked = True + State = cbChecked + TabOrder = 0 + OnChange = cbShowGrid_LeftAxis2Change + end + object Bevel1: TBevel + AnchorSideLeft.Control = BottomPanel + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = BottomPanel + Left = 357 + Height = 26 + Top = 0 + Width = 3 + Shape = bsSpacer + end + object cbShowGrid_LeftAxis1: TCheckBox + AnchorSideLeft.Control = Bevel1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrCenter + Left = 360 + Height = 19 + Top = 17 + Width = 130 + Caption = 'Show left axis #1 grid' + Checked = True + State = cbChecked + TabOrder = 1 + OnChange = cbShowGrid_LeftAxis2Change + end + object cbShowGrid_RightAxis: TCheckBox + AnchorSideLeft.Control = cbShowGrid_LeftAxis2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrCenter + Left = 506 + Height = 19 + Top = -2 + Width = 122 + BorderSpacing.Left = 16 + Caption = 'Show right axis grid' + TabOrder = 2 + OnChange = cbShowGrid_LeftAxis2Change + end + object cbShowGrid_BottomAxis: TCheckBox + AnchorSideLeft.Control = cbShowGrid_LeftAxis2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrCenter + Left = 506 + Height = 19 + Top = 17 + Width = 137 + BorderSpacing.Left = 16 + Caption = 'Show bottom axis grid' + Checked = True + State = cbChecked + TabOrder = 3 + OnChange = cbShowGrid_LeftAxis2Change + end + end + object ChartToolset: TChartToolset + Left = 368 + Top = 128 + object ChartToolsetAxisClickTool1: TAxisClickTool + Shift = [ssLeft] + OnClick = ChartToolsetAxisClickTool1Click + end + object ChartToolsetUserDefinedTool1: TUserDefinedTool + Shift = [ssLeft] + OnAfterMouseDown = ChartToolsetUserDefinedTool1AfterMouseDown + end + end + object RedChartSource: TRandomChartSource + PointsNumber = 11 + RandSeed = 108757768 + XMax = 1 + YMax = 1 + Left = 240 + Top = 216 + end + object RedAxisTransformations: TChartAxisTransformations + Left = 104 + Top = 216 + object RedAxisTransformationsAutoScaleAxisTransform: TAutoScaleAxisTransform + end + end + object BlueAxisTransformations: TChartAxisTransformations + Left = 104 + Top = 39 + object BlueAxisTransformationsAutoScaleAxisTransform: TAutoScaleAxisTransform + MaxValue = 2 + MinValue = 1 + end + end + object BlueChartSource: TRandomChartSource + PointsNumber = 21 + RandSeed = 1002808897 + XMax = 1 + YMax = 2 + Left = 240 + Top = 39 + end +end diff --git a/components/tachart/demo/axisclicktool/main.pas b/components/tachart/demo/axisclicktool/main.pas new file mode 100644 index 0000000000..4f94b11037 --- /dev/null +++ b/components/tachart/demo/axisclicktool/main.pas @@ -0,0 +1,100 @@ +unit main; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, + TAGraph, TATools, TAChartAxis, TASeries, TASources, TATransformations, Types; + +type + + { TForm1 } + + TForm1 = class(TForm) + Bevel1: TBevel; + Chart: TChart; + cbShowGrid_LeftAxis2: TCheckBox; + cbShowGrid_LeftAxis1: TCheckBox; + cbShowGrid_RightAxis: TCheckBox; + cbShowGrid_BottomAxis: TCheckBox; + RedSeries: TLineSeries; + BlueSeries: TLineSeries; + RedAxisTransformations: TChartAxisTransformations; + RedAxisTransformationsAutoScaleAxisTransform: TAutoScaleAxisTransform; + BlueAxisTransformations: TChartAxisTransformations; + BlueAxisTransformationsAutoScaleAxisTransform: TAutoScaleAxisTransform; + ChartToolset: TChartToolset; + ChartToolsetAxisClickTool1: TAxisClickTool; + ChartToolsetUserDefinedTool1: TUserDefinedTool; + Label1: TLabel; + Label2: TLabel; + lblClickedAxis: TLabel; + lblClickedAxisPart: TLabel; + BottomPanel: TPanel; + RedChartSource: TRandomChartSource; + BlueChartSource: TRandomChartSource; + procedure ChartToolsetAxisClickTool1Click(ASender: TChartTool; + Axis: TChartAxis; AHitInfo: TChartAxisHitTests); + procedure ChartToolsetUserDefinedTool1AfterMouseDown(ATool: TChartTool; + APoint: TPoint); + procedure cbShowGrid_LeftAxis2Change(Sender: TObject); + private + + public + + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.ChartToolsetAxisClickTool1Click(ASender: TChartTool; + Axis: TChartAxis; AHitInfo: TChartAxisHitTests); +var + s: String; +begin + s := ''; + if ahtGrid in AHitInfo then s := s + ', Axis grid'; + if ahtTitle in AHitInfo then s := s + ', Axis title'; + if ahtLine in AHitInfo then s := s + ', Axis line'; + if ahtLabels in AHitInfo then s := s + ', Axis labels'; + if ahtAxisStart in AHitInfo then s := s + ', begin of axis'; + if ahtAxisCenter in AHitInfo then s := s + ', center of axis'; + if ahtAxisEnd in AHitInfo then s := s + ', end of axis'; + if s <> '' then + begin + Delete(s, 1, 2); + lblClickedAxis.Caption := Axis.Title.Caption; + lblClickedAxisPart.Caption := s; + end; +end; + +procedure TForm1.ChartToolsetUserDefinedTool1AfterMouseDown(ATool: TChartTool; + APoint: TPoint); +begin + lblClickedAxis.Caption := '(none)'; + lblClickedAxisPart.Caption := '(none)'; + ATool.Handled; +end; + +procedure TForm1.cbShowGrid_LeftAxis2Change(Sender: TObject); +begin + if Sender = cbShowGrid_LeftAxis2 then + Chart.LeftAxis.Grid.Visible := TCheckbox(Sender).Checked + else if Sender = cbShowGrid_LeftAxis1 then + Chart.AxisList[3].Grid.Visible := TCheckbox(Sender).Checked + else if Sender = cbShowGrid_RightAxis then + Chart.AxisList[2].Grid.Visible := TCheckbox(Sender).Checked + else if Sender = cbShowGrid_BottomAxis then + Chart.BottomAxis.Grid.Visible := TCheckbox(Sender).Checked; +end; + +end. +