lazarus/components/tachart/demo/chartsource/frmsorted.pas

106 lines
2.8 KiB
ObjectPascal

unit frmSorted;
{$mode ObjFPC}{$H+}
interface
uses
SysUtils, Classes,
Forms, Controls, StdCtrls,
TAGraph, TAChartUtils, TAMultiSeries, TACustomSource, TASources;
type
TDataForSorting = record
Year: Integer;
CityName: String;
Visitors: Integer;
Color: TChartColor;
end;
TSortedFrame = class(TFrame)
btnSort: TButton;
BubbleChart: TChart;
BubbleSeries: TBubbleSeries;
lblSortInfo: TLabel;
SortedChartSource: TSortedChartSource;
UserDefinedChartSource: TUserDefinedChartSource;
procedure btnSortClick(Sender: TObject);
procedure BubbleChartAfterPaint({%H-}ASender: TChart);
procedure UserDefinedChartSourceGetChartDataItem({%H-}ASource:
TUserDefinedChartSource; AIndex: Integer; var AItem: TChartDataItem);
private
FDataForSorting: array of TDataForSorting;
procedure CreateDataForSorting;
public
constructor Create(AOwner: TComponent); override;
end;
implementation
{$R *.lfm}
constructor TSortedFrame.Create(AOwner: TComponent);
begin
inherited;
CreateDataForSorting;
end;
procedure TSortedFrame.btnSortClick(Sender: TObject);
begin
SortedChartSource.Sorted := not SortedChartSource.Sorted;
end;
procedure TSortedFrame.BubbleChartAfterPaint(ASender: TChart);
begin
if SortedChartSource.IsSorted then
lblSortInfo.Caption := 'Sorted by radius (descending)'
else
lblSortInfo.Caption := 'Not sorted';
end;
procedure TSortedFrame.UserDefinedChartSourceGetChartDataItem(ASource:
TUserDefinedChartSource; AIndex: Integer; var AItem: TChartDataItem);
begin
AItem.X := FDataForSorting[AIndex].Year;
AItem.Y := 0;
AItem.YList[0] := Sqrt(FDataForSorting[AIndex].Visitors/100000 / PI);
AItem.Text := FDataForSorting[AIndex].CityName;
AItem.Color := FDataForSorting[AIndex].Color;
end;
procedure TSortedFrame.CreateDataForSorting;
procedure AddCity(AYear: Integer; const ACityName: string;
ANumberOfVisitors: Integer; AColor: TChartColor);
begin
SetLength(FDataForSorting, Length(FDataForSorting) + 1);
with FDataForSorting[High(FDataForSorting)] do begin
Year := AYear;
CityName := ACityName;
Visitors := ANumberOfVisitors;
Color := AColor;
end;
end;
begin
SetLength(FDataForSorting, 0);
AddCity(1967, 'City A', 155000, $00FFFF); // yellow
AddCity(1968, 'City B', 30000, $FF0000); // blue
AddCity(1969, 'City C', 450000, $FF00FF); // fuchsia
AddCity(1970, 'City D', 50000, $FFFF00); // aqua
AddCity(1971, 'City E', 80000, $00FF00); // lime
AddCity(1972, 'City F', 615000, $0000FF); // red
UserDefinedChartSource.PointsNumber := Length(FDataForSorting);
{ These settings are made in the Object Inspector for the SortedChartSource:
- Origin = UserDefinedChartSource
- SortBy = sbY
- SortIndex = 1 // --> sort by radius
- SortDir = sdDescending // --> draw large bubbles first
}
end;
end.