lazarus/components/tachart/demo/aggpas/Main.pas

109 lines
2.5 KiB
ObjectPascal

unit Main;
{$mode objfpc}{$H+}
interface
uses
Classes, ExtCtrls, StdCtrls, SysUtils, FileUtil, Forms, Controls,
Graphics, FPCanvas, Dialogs,
Agg_LCL, Agg_FPImage,
TAGraph, TAGUIConnectorAggPas, TASeries, TASources, TADrawerAggPas, TADrawUtils;
type
{ TMainForm }
TMainForm = class(TForm)
Bevel1: TBevel;
cbAggPas: TCheckBox;
Chart: TChart;
ChartConstantLine: TConstantLine;
ChartLineSeries: TLineSeries;
ChartPieSeries: TPieSeries;
ChartGUIConnectorAggPas: TChartGUIConnectorAggPas;
ChartPaintBox: TPaintBox;
BottomPanel: TPanel;
RandomChartSource: TRandomChartSource;
procedure cbAggPasClick(Sender: TObject);
procedure Chart1AfterPaint(ASender: TChart);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ChartPaintBoxPaint(Sender: TObject);
private
FAggCanvas: TAggLCLCanvas;
FBmp: TBitmap;
end;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
uses
TAChartUtils, TADrawerCanvas;
{ TMainForm }
procedure TMainForm.cbAggPasClick(Sender: TObject);
begin
if cbAggPas.Checked then
Chart.GUIConnector := ChartGUIConnectorAggPas
else
Chart.GUIConnector := nil;
end;
procedure TMainForm.Chart1AfterPaint(ASender: TChart);
begin
Unused(ASender);
ChartPaintBox.Invalidate;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FBmp := TBitmap.Create;
FAggCanvas := TAggLCLCanvas.Create;
FAggCanvas.Image.PixelFormat := afpimRGBA32;
{$IFDEF LCLWin32}
ChartLineSeries.Transparency := 128;
{$ENDIF}
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FAggCanvas.Free;
FBmp.Free;
end;
procedure TMainForm.ChartPaintBoxPaint(Sender: TObject);
var
d: IChartDrawer;
begin
FAggCanvas.Width := ChartPaintBox.Width;
FAggCanvas.Height := ChartPaintBox.Height;
Chart.DisableRedrawing;
Chart.Title.Text.Text := 'AggPas';
d := TAggPasDrawer.Create(FAggCanvas);
d.DoGetFontOrientation := @CanvasGetFontOrientationFunc;
Chart.Draw(d, ChartPaintBox.Canvas.ClipRect);
Chart.Title.Text.Text := 'Standard';
Chart.EnableRedrawing;
// On Windows the order of red, green and blue is blue-green-red, while on
// others it is red-green-blue. In principle, AggPas can handle this, but
// since it is not maintained ATM, I chose the "easy way" to swap the red
// and blue bytes.
{$IFNDEF LCLWin32}
SwapRedBlue(FAggCanvas.Image.IntfImg);
{$ENDIF}
FBmp.LoadFromIntfImage(FAggCanvas.Image.IntfImg);
ChartPaintBox.Canvas.Draw(0, 0, FBmp);
end;
end.