Custom drawing

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
Leo
Newbie
Newbie
Posts: 4
Joined: Tue Mar 07, 2006 12:00 am
Location: Norway

Custom drawing

Post by Leo » Thu Mar 09, 2006 7:55 pm

Newbee here, so plase bear with me:)

I have a TFastLine series displaying a running graph. Near the BottomAxis I need to draw some letters (one at the time) for some of the values displayed. The letters draw are like a labels for the values I guess, but I need the label at the bottom of the graph, and scrolling 'together' with the value it describes.

Been reading help and examples, but right now I feel like I'm getting information overload:) and can not figure out how to achive this or even where to start.

regards,
Leo

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Fri Mar 10, 2006 9:52 am

Hi Leo,

I'm not sure of what are you trying to achieve but you could do something like the code below to custom draw on TeeChart's canvas. However, you could also consider using TAnnotationTool objects (only available in TeeChart Pro) or custom labels as shown at All Features\Welcome!\Axes\Labels\Custom Labels example in TeeChart's features demo. You'll find the features demo at TeeChart's program group.

Code: Select all

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Chart1: TChart;
    TeeCommander1: TTeeCommander;
    Series1: TFastLineSeries;
    procedure FormCreate(Sender: TObject);
    procedure Chart1AfterDraw(Sender: TObject);
    procedure Chart1Zoom(Sender: TObject);
    procedure Chart1UndoZoom(Sender: TObject);
    procedure Chart1Scroll(Sender: TObject);
  private
    { Private declarations }
    procedure CalculateLabels(Series: TChartSeries);
  public
    { Public declarations }
  end;

type
  TCustomText = record
    X,Y: Integer;
    Text: String;
  end;

var
  Form1: TForm1;
  Labels: array[0..49] of TCustomText;
  count: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.FillSampleValues(Length(Labels));
  CalculateLabels(Series1);
end;

procedure TForm1.Chart1AfterDraw(Sender: TObject);
var i: Integer;
begin
  for i:=0 to count-1 do
    Chart1.Canvas.TextOut(Labels[i].X,Labels[i].Y,Labels[i].Text);
end;

procedure TForm1.CalculateLabels(Series: TChartSeries);
var i: Integer;
begin
  Chart1.Draw;
  count:=0;

  for i:=0 to Series.Count-1 do
    if Series.YValue[i] >300 then
    begin
      Labels[count].X:=Series.CalcXPos(i);
      Labels[count].Y:=Series.CalcYPos(i);
      Labels[count].Text:='Custom text '+IntToStr(i);
      inc(count);
    end;
end;

procedure TForm1.Chart1Zoom(Sender: TObject);
begin
  CalculateLabels(Series1);
end;

procedure TForm1.Chart1UndoZoom(Sender: TObject);
begin
  CalculateLabels(Series1);
end;

procedure TForm1.Chart1Scroll(Sender: TObject);
begin
  CalculateLabels(Series1);
end;

end.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply