mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-03 04:23:45 +02:00
295 lines
7.4 KiB
ObjectPascal
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.
|
|
|