1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
unit Main;
{$mode objfpc}{$H+}
interface
uses
Classes, ComCtrls, ExtCtrls, StdCtrls, SysUtils, FileUtil, LResources, Forms,
Controls, Graphics, Dialogs, TAGraph, TASeries, TASources, TATools, Types, TAChartUtils;
type
{ TForm1 }
TForm1 = class(TForm)
cbSorted: TCheckBox;
chPoints: TChart;
chBarsBarSeries1: TBarSeries;
chPointsLineSeries1: TLineSeries;
chBars: TChart;
ctBars: TChartToolset;
ctBarsDataPointDragTool1: TDataPointDragTool;
ctPoints: TChartToolset;
ctPointsDataPointClickTool1: TDataPointClickTool;
ctPointsDataPointDragTool1: TDataPointDragTool;
ctPointsDataPointHintTool1: TDataPointHintTool;
PageControl1: TPageControl;
Panel1: TPanel;
RandomChartSource1: TRandomChartSource;
tsPoints: TTabSheet;
tsBars: TTabSheet;
procedure cbSortedChange(Sender: TObject);
procedure chPointsLineSeries1GetMark(out AFormattedMark: String;
AIndex: Integer);
procedure ctBarsDataPointDragTool1BeforeKeyDown(ATool: TChartTool;
APoint: TPoint);
procedure ctBarsDataPointDragTool1Drag(ASender: TDataPointDragTool;
var AGraphPoint: TDoublePoint);
procedure ctBarsDataPointDragTool1DragStart(ASender: TDataPointDragTool;
var AGraphPoint: TDoublePoint);
procedure ctPointsDataPointClickTool1PointClick(ATool: TChartTool;
APoint: TPoint);
procedure ctPointsDataPointHintTool1Hint(ATool: TDataPointHintTool;
const APoint: TPoint; var AHint: String);
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
uses
Math;
{ TForm1 }
procedure TForm1.cbSortedChange(Sender: TObject);
begin
chPointsLineSeries1.ListSource.Sorted := cbSorted.Checked;
end;
procedure TForm1.chPointsLineSeries1GetMark(
out AFormattedMark: String; AIndex: Integer);
begin
// Show item label for last dragged point.
if AIndex = ctPointsDataPointDragTool1.PointIndex then
with chPointsLineSeries1 do
AFormattedMark := Source.FormatItem(Marks.Format, AIndex, 0)
else
AFormattedMark := '';
end;
procedure TForm1.ctBarsDataPointDragTool1BeforeKeyDown(ATool: TChartTool;
APoint: TPoint);
begin
TDataPointDragTool(ATool).GrabRadius := chBarsBarSeries1.GetBarWidth(0);
end;
procedure TForm1.ctBarsDataPointDragTool1Drag(ASender: TDataPointDragTool;
var AGraphPoint: TDoublePoint);
begin
// Only allow vertical dragging.
AGraphPoint.X := ASender.Origin.X;
end;
procedure TForm1.ctBarsDataPointDragTool1DragStart(ASender: TDataPointDragTool;
var AGraphPoint: TDoublePoint);
const
Y_TOLERANCE = 3;
var
f: TGraphToImageFunc;
begin
f := @chBars.YGraphToImage;
if Abs(f(ASender.Origin.Y) - f(AGraphPoint.Y)) > Y_TOLERANCE then
ASender.Handled;
end;
procedure TForm1.ctPointsDataPointClickTool1PointClick(
ATool: TChartTool; APoint: TPoint);
var
pi: Integer;
begin
Unused(ATool, APoint);
pi := ctPointsDataPointClickTool1.PointIndex;
with chPointsLineSeries1 do
SetColor(pi, IfThen(GetColor(pi) = clRed, clTAColor, clRed));
end;
procedure TForm1.ctPointsDataPointHintTool1Hint(ATool: TDataPointHintTool;
const APoint: TPoint; var AHint: String);
begin
Unused(APoint);
AHint := 'Custom hint for point ' + IntToStr(ATool.PointIndex);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
RandSeed := 675402;
for i := 1 to 10 do
chPointsLineSeries1.AddXY(i, Random(20) - 10);
chBarsBarSeries1.ListSource.CopyFrom(RandomChartSource1);
end;
end.
|