Delphi XE2中的TeeChart透明度

Delphi XE2中的TeeChart透明度,delphi,transparency,teechart,Delphi,Transparency,Teechart,是否可以使TeeChart的背景透明?我使用的是v2011.03.32815(DelphiXe2自带的版本)。我找到了一个可行的解决方案,但这不是我需要的。我的DBCharts位于一个框架内,绘制图表的背景可能会发生变化。那么,有什么想法吗?发布的示例怎么样 应用于多图表表单/面板的内容可能如下所示: procedure TFrame3.Chart1BeforeDrawChart(Sender: TObject); begin MakeChartTransparent(Chart1, Bac

是否可以使TeeChart的背景透明?我使用的是v2011.03.32815(DelphiXe2自带的版本)。我找到了一个可行的解决方案,但这不是我需要的。我的
DBChart
s位于一个框架内,绘制图表的背景可能会发生变化。那么,有什么想法吗?

发布的示例怎么样

应用于多图表表单/面板的内容可能如下所示:

procedure TFrame3.Chart1BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart1, Back1);
end;

procedure TFrame3.Chart2BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart2, Back2);
end;

procedure TFrame3.Chart3BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart3, Back3);
end;

procedure TFrame3.MakeChartTransparent(Chart: TChart; var Back: TBitmap);
begin
  if not Assigned(Back) then
  begin
    Back:=TBitmap.Create;
    Back.Width:=Chart.Width;
    Back.Height:=Chart.Height;

    Back.Canvas.CopyRect(Chart.ClientRect, (Self.Parent as TForm).Canvas, Chart.BoundsRect);
  end;

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

procedure TFrame3.Timer1Timer(Sender: TObject);
begin
  Chart1[0].FillSampleValues();
  Chart2[0].FillSampleValues();
  Chart3[0].FillSampleValues();
end;
请注意,需要为每个图表初始化后位图

不要忘记在表单的OnCreate事件中设置图表透明:

procedure TForm2.FormCreate(Sender: TObject);
begin
  Frame31.Chart1.Color:=clNone;
  Frame31.Chart2.Color:=clNone;
  Frame31.Chart3.Color:=clNone;
end;
完整项目可用。

发布的示例如何

应用于多图表表单/面板的内容可能如下所示:

procedure TFrame3.Chart1BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart1, Back1);
end;

procedure TFrame3.Chart2BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart2, Back2);
end;

procedure TFrame3.Chart3BeforeDrawChart(Sender: TObject);
begin
  MakeChartTransparent(Chart3, Back3);
end;

procedure TFrame3.MakeChartTransparent(Chart: TChart; var Back: TBitmap);
begin
  if not Assigned(Back) then
  begin
    Back:=TBitmap.Create;
    Back.Width:=Chart.Width;
    Back.Height:=Chart.Height;

    Back.Canvas.CopyRect(Chart.ClientRect, (Self.Parent as TForm).Canvas, Chart.BoundsRect);
  end;

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

procedure TFrame3.Timer1Timer(Sender: TObject);
begin
  Chart1[0].FillSampleValues();
  Chart2[0].FillSampleValues();
  Chart3[0].FillSampleValues();
end;
请注意,需要为每个图表初始化后位图

不要忘记在表单的OnCreate事件中设置图表透明:

procedure TForm2.FormCreate(Sender: TObject);
begin
  Frame31.Chart1.Color:=clNone;
  Frame31.Chart2.Color:=clNone;
  Frame31.Chart3.Color:=clNone;
end;

完整项目可用。

这与teechart论坛中提供的示例相同。我只需要不绘制后面板。@iManBiglari是的,对不起,我在线程中错过了该代码。让我进一步研究一下,然后再回复您。@iManBiglari再次查看,示例中的backgorund图像是为了证明图表面板是完全透明的。不管背景是什么,都应该是这样。请将您的问题示例项目发送给我们,网址为www.steema.net/upload/,以便我们在此测试可能的解决方案?提前感谢。@iManBiglari感谢您的项目。您甚至没有尝试在其上实现图表透明度。无论如何,我给你指出的线程中的代码的问题是,因为在矩形没有被更新时,后位图被分配。见我的最新答复。完整项目可在@iManBiglari获得。在这种情况下,您需要为每个图表存储初始位图。请参阅更新的答案和项目。这与teechart论坛中提供的示例相同。我只需要不绘制后面板。@iManBiglari是的,对不起,我在线程中错过了该代码。让我进一步研究一下,然后再回复您。@iManBiglari再次查看,示例中的backgorund图像是为了证明图表面板是完全透明的。不管背景是什么,都应该是这样。请将您的问题示例项目发送给我们,网址为www.steema.net/upload/,以便我们在此测试可能的解决方案?提前感谢。@iManBiglari感谢您的项目。您甚至没有尝试在其上实现图表透明度。无论如何,我给你指出的线程中的代码的问题是,因为在矩形没有被更新时,后位图被分配。见我的最新答复。完整项目可在@iManBiglari获得。在这种情况下,您需要为每个图表存储初始位图。请参阅更新的答案和项目。我尝试时从未实现过这一点。我尝试时从未实现过这一点。