lazarus/components/tachart/demo/basic/unit1.pas
2020-08-04 12:29:48 +00:00

295 lines
7.4 KiB
ObjectPascal

unit unit1;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Forms, Graphics, ExtCtrls,
TAGraph, TASeries, TATools, Buttons, StdCtrls, Spin, Classes;
type
{ TForm1 }
TForm1 = class(TForm)
btnClearArea: TButton;
btnClearBar: TButton;
btnClearLine: TButton;
btnClearAll: TButton;
btnClearPie: TButton;
btnAddBar: TButton;
btnAddPie: TButton;
btnAddLine: TButton;
btnAddArea: TButton;
cbShowAxisTitles: TCheckBox;
Chart1: TChart;
cbBottomAxis: TCheckBox;
cbLeftAxis: TCheckBox;
cbTitle: TCheckBox;
cbFooter: TCheckBox;
cbInverted: TCheckBox;
cbLegend: TCheckBox;
cbShowGridCheckBox: TCheckBox;
Chart1LineHor: TConstantLine;
Chart1LineVert: TConstantLine;
cbMarkStyle: TComboBox;
ChartToolset1: TChartToolset;
DataPointCrosshairTool: TDataPointCrosshairTool;
cbCrosshairTool: TComboBox;
lblCrossHairTool: TLabel;
lblAddCount: TLabel;
lblAdd: TLabel;
lblMarkStyle: TLabel;
lblClear: TLabel;
Panel1: TPanel;
edAddCount: TSpinEdit;
procedure btnClearAllClick(Sender: TObject);
procedure btnClearAreaClick(Sender: TObject);
procedure btnClearBarClick(Sender: TObject);
procedure btnClearLineClick(Sender: TObject);
procedure btnClearPieClick(Sender: TObject);
procedure cbCrosshairToolChange(Sender: TObject);
procedure cbInvertedChange(Sender: TObject);
procedure btnAddAreaClick(Sender: TObject);
procedure btnAddBarClick(Sender: TObject);
procedure btnAddLineClick(Sender: TObject);
procedure btnAddPieClick(Sender: TObject);
procedure cbBottomAxisChange(Sender: TObject);
procedure cbLeftAxisChange(Sender: TObject);
procedure cbShowAxisTitlesChange(Sender: TObject);
procedure cbTitleChange(Sender: TObject);
procedure cbFooterChange(Sender: TObject);
procedure cbLegendChange(Sender: TObject);
procedure cbShowGridCheckBoxChange(Sender: TObject);
private
FArea: TAreaSeries;
FBar: TBarSeries;
FLine: TLineSeries;
FPie: TPieSeries;
x, y, x1, y1, x3, y3: Double;
procedure InitBar;
procedure InitLine;
procedure InitPie;
procedure InitArea;
procedure BringToFront(ASeries: TBasicChartSeries);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
uses
Math, GraphUtil, TAChartUtils, TATextElements, TATypes;
{ TForm1 }
procedure TForm1.BringToFront(ASeries: TBasicChartSeries);
var
s: TBasicChartSeries;
begin
for s in Chart1.Series do
s.ZPosition := Ord(s = ASeries);
end;
procedure TForm1.btnAddAreaClick(Sender: TObject);
var
i: integer;
begin
if FArea = nil then InitArea;
BringToFront(FArea);
FArea.Marks.Style := TSeriesMarksStyle(cbMarkStyle.ItemIndex);
for i := 1 to edAddCount.Value do begin
X3 := X3 + 1;
if random(2) >= 0.7 then Y3 := Y3 + random(5)
else if random(2) >= 0.7 then Y3 := 0
else Y3 := Y3 - random(5);
FArea.AddXY(x3, y3, Format('Area%d', [i]));
end;
end;
procedure TForm1.btnAddBarClick(Sender: TObject);
var
i: integer;
begin
if FBar = nil then InitBar;
BringToFront(FBar);
FBar.Marks.Style := TSeriesMarksStyle(cbMarkStyle.ItemIndex);
for i := 1 to edAddCount.Value do begin
FBar.AddXY(x, y, Format('Bar%d', [i]));
X := X + 1;
if random(2) >= 0.7 then Y := Y + random(5)
else if random(2) >= 0.7 then Y := 0
else Y := Y - random(5);
end;
end;
procedure TForm1.btnAddLineClick(Sender: TObject);
var
i: integer;
begin
if FLine = nil then InitLine;
BringToFront(FLine);
FLine.Marks.Style := TSeriesMarksStyle(cbMarkStyle.ItemIndex);
for i := 1 to edAddCount.Value do begin
FLine.AddXY(x1, y1, Format('Line%d', [i]));
X1 := X1 + 1.5;
if random(2) >= 0.5 then Y1 := Y1 + random(10)
else Y1 := Y1 - random(5);
end;
end;
procedure TForm1.btnAddPieClick(Sender: TObject);
var
i: integer;
begin
if FPie = nil then InitPie;
BringToFront(FPie);
FPie.Marks.Style := TSeriesMarksStyle(cbMarkStyle.ItemIndex);
for i := 1 to edAddCount.Value do begin
FPie.AddPie(3.4234235235, 'sde21312', clTAColor);
FPie.AddPie(0.2323, 'adassssssdddddd', clTAColor);
FPie.AddPie(30, 'filipe romao', clTAColor);
FPie.AddPie(40, '234eds sa', clTAColor);
end;
end;
procedure TForm1.btnClearAllClick(Sender: TObject);
begin
Chart1.ClearSeries;
FArea := nil;
FBar := nil;
FLine := nil;
FPie := nil;
end;
procedure TForm1.btnClearAreaClick(Sender: TObject);
begin
FreeAndNil(FArea);
end;
procedure TForm1.btnClearBarClick(Sender: TObject);
begin
FreeAndNil(FBar);
end;
procedure TForm1.btnClearLineClick(Sender: TObject);
begin
FreeAndNil(FLine);
end;
procedure TForm1.btnClearPieClick(Sender: TObject);
begin
FreeAndNil(FPie);
end;
procedure TForm1.cbCrosshairToolChange(Sender: TObject);
begin
DataPointCrosshairTool.Enabled := CbCrosshairTool.ItemIndex > 0;
case cbCrosshairTool.ItemIndex of
1: begin
DatapointCrosshairTool.Shape := ccsVertical;
DatapointCrosshairTool.DistanceMode := cdmOnlyX;
end;
2: begin
DatapointCrosshairTool.Shape := ccsHorizontal;
DatapointCrosshairTool.DistanceMode := cdmOnlyY;
end;
3: begin
DatapointCrosshairTool.Shape := ccsCross;
DatapointCrosshairTool.DistanceMode := cdmXY;
end;
end;
end;
procedure TForm1.cbBottomAxisChange(Sender: TObject);
begin
Chart1.BottomAxis.Visible := cbBottomAxis.Checked;
end;
procedure TForm1.cbFooterChange(Sender: TObject);
begin
Chart1.Foot.Visible := cbFooter.Checked;
end;
procedure TForm1.cbInvertedChange(Sender: TObject);
begin
Chart1.BottomAxis.Inverted := cbInverted.Checked;
Chart1.LeftAxis.Inverted := cbInverted.Checked;
end;
procedure TForm1.cbLegendChange(Sender: TObject);
begin
Chart1.Legend.Visible := cbLegend.Checked;
end;
procedure TForm1.cbShowAxisTitlesChange(Sender: TObject);
begin
with Chart1.BottomAxis.Title do
if cbShowAxisTitles.Checked then Caption := 'X axis' else Caption := '';
with Chart1.LeftAxis.Title do
if cbShowAxisTitles.Checked then Caption := 'Y axis' else Caption := '';
end;
procedure TForm1.cbShowGridCheckBoxChange(Sender: TObject);
begin
Chart1.LeftAxis.Grid.Visible := cbShowGridCheckBox.Checked;
Chart1.BottomAxis.Grid.Visible := cbShowGridCheckBox.Checked;
end;
procedure TForm1.cbLeftAxisChange(Sender: TObject);
begin
Chart1.LeftAxis.Visible := cbLeftAxis.Checked;
end;
procedure TForm1.cbTitleChange(Sender: TObject);
begin
Chart1.Title.Visible := cbTitle.Checked;
end;
procedure TForm1.InitArea;
begin
FArea := TAreaSeries.Create(Chart1);
FArea.SeriesColor := clFuchsia;
FArea.Title := 'area';
FArea.Marks.LabelBrush.Color := GetHighlightColor(FArea.SeriesColor, 100);
Chart1.AddSeries(FArea);
end;
procedure TForm1.InitBar;
begin
FBar := TBarSeries.Create(Chart1);
FBar.Title := 'bars';
FBar.BarBrush.Color := clGreen;
FBar.Marks.LabelBrush.Color := GetHighlightColor(FBar.BarBrush.Color, 100);
Chart1.AddSeries(FBar);
end;
procedure TForm1.InitLine;
begin
FLine := TLineSeries.Create(Chart1);
FLine.ShowLines := true;
FLine.ShowPoints := true;
FLine.Pointer.Style := psRectangle;
FLine.Pointer.Brush.Color := clRed;
FLine.Title := 'line';
FLine.SeriesColor := clRed;
FLine.Marks.LabelBrush.Color := GetHighlightColor(FLine.SeriesColor, 100);
Chart1.AddSeries(FLine);
end;
procedure TForm1.InitPie;
begin
FPie := TPieSeries.Create(Chart1);
FPie.Title := 'pie';
FPie.Marks.LabelBrush.Color := $80FFFF;
FPie.Marks.LinkPen.Width := 2;
FPie.Marks.OverlapPolicy := opHideNeighbour;
Chart1.AddSeries(FPie);
end;
end.