Page 1 of 1

Overlay complete chart object transparently onto control

Posted: Thu May 03, 2007 7:29 pm
by 9534970
Is there a way to configure the tChart object so the objects background is completely transparent when placed onto another window control? For example, If I wanted to place a pie chart onto a panel and I wanted the panels background to bleed through.

Posted: Mon May 07, 2007 6:51 am
by Pep
Hi Joey,

here I post one example code which does this (place a Chart over an image to make the back transparent).

Code: Select all

unit Unit_Chart_Color_clNone;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls, TeCanvas, Series,
  jpeg;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    Image1: TImage;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure Chart1BeforeDrawChart(Sender: TObject);
    procedure Chart1AfterDraw(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
    Back : TBitmap;
    Blend : TTeeBlend;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.Color:=clNone;
end;

type
  TTeeCanvasAccess=class(TTeeCanvas3D);

procedure TForm1.Chart1BeforeDrawChart(Sender: TObject);
begin
  if not Assigned(Back) then
  begin
    Back:=TBitmap.Create;
    Back.Width:=Chart1.Width;
    Back.Height:=Chart1.Height;

    Back.Canvas.CopyRect(Chart1.ClientRect,Canvas,Chart1.BoundsRect);
  end;

  if Chart1.Color=clNone then
     Chart1.Canvas.Draw(0,0,Back);

{  if ScrollBar1.Position>0 then
     Blend:=Chart1.Canvas.BeginBlending(Chart1.,ScrollBar1.Position)
  else
     Blend:=nil;}
end;

procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
{  if Assigned(Blend) then
     Chart1.Canvas.EndBlending(Blend);}
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  Chart1.Invalidate;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
     Chart1.Color:=clDefault
  else
     Chart1.Color:=clNone;
end;

end.