2013-07-17 79 views
1

我想知道如何使用TeeChart TAreaSeries,特別是創建不重疊的系列。是否可以'剪輯'TAreaSeries的下部?

當我創建同積兩區系列,與同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

是,你可以在新功能的演示,在擁有TeeChart的程序組做一些如所有功能\歡迎\軸\不透明區例如,可用,例如:

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

+0

謝謝你的回答,它完美的作品!不過,我想爲這種方法添加一個評論:儘管Series1在Y = 700值下不可見,但它仍然存在於「物理」上。所以如果我點擊Series1和Series2之間看似空的灰色區域,Series1.OnClick事件仍然會被觸發。我想知道是否有一種方法可以視覺和「物理」剪輯Series1? – Wrackage

+0

@Wrackage不用客氣。是的,可以使用TChart.CancelMouse屬性來控制何時停止處理鼠標單擊事件。我已經擴展了我的例子實現這一點。 –

相關問題