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 131 132 133 134 135 136 137 138 139 140 141
|
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;
cbConstBarWidth: 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;
Panel2: TPanel;
rbDragY: TRadioButton;
rbDragX: TRadioButton;
RandomChartSource1: TRandomChartSource;
tsPoints: TTabSheet;
tsBars: TTabSheet;
procedure cbConstBarWidthChange(Sender: TObject);
procedure cbSortedChange(Sender: TObject);
procedure chPointsLineSeries1GetMark(out AFormattedMark: String;
AIndex: Integer);
procedure ctBarsDataPointDragTool1Drag(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);
procedure rbDragYChange(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.cbConstBarWidthChange(Sender: TObject);
begin
if cbConstBarWidth.Checked then
chBarsBarSeries1.BarWidthStyle := bwPercentMin
else
chBarsBarSeries1.BarWidthStyle := bwPercent;
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.ctBarsDataPointDragTool1Drag(ASender: TDataPointDragTool;
var AGraphPoint: TDoublePoint);
begin
if rbDragY.Checked then begin
// Only allow vertical dragging.
AGraphPoint.X := ASender.Origin.X;
ctBarsDataPointDragTool1.ActiveCursor := crSizeNS;
end else
if rbDragX.Checked then begin
// Only allow horizontal dragging
AGraphPoint.Y := ASender.Origin.Y;
ctBarsDataPointDragTool1.ActiveCursor := crSizeWE;
end;
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;
procedure TForm1.rbDragYChange(Sender: TObject);
begin
if rbDragY.Checked then begin
chBarsBarSeries1.ToolTargets := chBarsBarSeries1.ToolTargets - [nptCustom];
ctBarsDataPointDragTool1.Targets := ctBarsDataPointDragTool1.Targets - [nptCustom];
end else begin
chBarsBarSeries1.ToolTargets := chBarsBarSeries1.ToolTargets + [nptCustom];
ctBarsDataPointDragTool1.Targets := ctBarsDataPointDragTool1.Targets + [nptCustom];
end;
end;
end.
|