是否可以'剪辑'TAreaSeries的下半部分?

时间:2013-07-17 11:56:41

标签: delphi delphi-7 vcl teechart

我想获得一些关于使用TeeChart TAreaSeries的提示,特别是关于创建NOT重叠系列的提示。

当我在同一个图上创建两个Area系列时,与相同的BottomAxis和LeftAxis相关,我得到这样的结果:

https://skydrive.live.com/redir?resid=9966BBBE2447AA89!116&authkey=!AKm6DMvrxleX5ps

如果我垂直滚动图表,我会看到这两个系列无休止地向下扩展到负无穷大(Y坐标)。

但是我想知道是否有可能在某个Y点“切断”系列的下半部分? 所以我可以检索这样的东西:

https://skydrive.live.com/redir?resid=9966BBBE2447AA89!115&authkey=!AGaejDREPKnPYMY

(请注意链接而不是图片,由于声誉限制,我无权发布链接)

1 个答案:

答案 0 :(得分:1)

是的,您可以在TeeChart程序组提供的新功能演示中的所有功能\欢迎!\ Axes \ Opaque区域示例中执行某些操作,例如:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TAreaSeries;
    Series2: TAreaSeries;
    procedure FormCreate(Sender: TObject);
    procedure Series1Click(Sender: TChartSeries; ValueIndex: Integer;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Chart1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    ClipRect: TRect;
    procedure SeriesBeforeDraw(Sender: TObject);
    procedure SeriesAfterDraw(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses TeCanvas;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.BeforeDrawValues:=SeriesBeforeDraw;
  Series1.AfterDrawValues:=SeriesAfterDraw;
end;

procedure TForm1.SeriesBeforeDraw(Sender: TObject);

  Function SeriesRect(Series:TChartSeries):TRect;
  begin
    With result do
    begin
      Left:=Series.GetHorizAxis.IStartPos;
      Right:=Series.GetHorizAxis.IEndPos;
      Top:=Series.GetVertAxis.IStartPos;
      Bottom:=Series.GetVertAxis.CalcYPosValue(700);
    end;
  end;

begin
  ClipRect:=SeriesRect( Sender as TChartSeries );

  { make opaque }
  With Chart1 do
       if CanClip then
          Canvas.ClipRectangle(ClipRect);
end;

procedure TForm1.SeriesAfterDraw(Sender: TObject);
begin
  Chart1.Canvas.UnClipRectangle;
end;

procedure TForm1.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Caption:=IntToStr(ValueIndex);
end;

procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Series1.Clicked(X,Y)<>-1) then
    Chart1.CancelMouse:=not PointInRect(ClipRect,X,Y);
end;

end.

生成此图表:

enter image description here