Annotation Tool

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
ceasa
Newbie
Newbie
Posts: 4
Joined: Fri Nov 15, 2002 12:00 am

Annotation Tool

Post by ceasa » Fri Dec 23, 2005 8:11 am

Hola, tenemos Teechart v6 pro y nos sutge un problema:

creamos en ejecucion un numero de series con ejes hor y vert customizados, para ver superpuestas todas las series en un solo grafico,y a la vez creamos una annotation tool para visualizar un texto por cada serie dentro del espacio que ocupa cada una, un estilo al grafico de ejemplo de Inverline.
El problema es que no somos capaces de situar la annotation en cada punto para que nos quede por ejemplo x puntos por encima de cada eje horizontal de cada serie. como podriamos hacer?, si hago una prueba haciendolo en diseño me dunciona con istartpos pero en ejecucion no. el codigo es el siguiente :


var
xxx, eje,i:integer;
pPercent, sPos, ePos, nFactor: double;
anotacion : TannotationTool;
xx: double;
begin
nfactor := 100/ListaItemsGrafico.Count;
sPos:=100-nFactor;
EPos:=100;
pPercent := 0;
eje:=0;

// PARAMETRIZAR GRAFICO
Chart1.SeriesList.Clear;
for i:=0 to ListaItemsGrafico.Count-1 do begin
Chart1.AddSeries(TLineSeries.Create( Self ));
if Odd(i) then
Chart1.Series.Color := clGreen
else
Chart1.Series.Color := clBlue;
Chart1.Series.Title := ListaItemsGrafico.Strings;
Chart1.Series.XValues.DateTime := true;
Chart1.Series.XValues.Name := 'Fecha/Hora';
Chart1.Series.YValues.Name :=ListaDescItemsGrafico.Strings;
Chart1.Series.Identifier :=ListaUnidades.Strings;

// EJE VERTICAL CUSTOMIZADO
Chart1.CustomAxes.Add;
Chart1.CustomAxes[eje].LabelsFont.Color:= Chart1.Series[i].Color;
Chart1.CustomAxes[eje].Axis.Color:= Chart1.Series[i].Color;
Chart1.CustomAxes[eje].PositionPercent := 0;
Chart1.CustomAxes[eje].StartPosition := sPos;
Chart1.CustomAxes[eje].EndPosition := ePos;
ePos := ePos-nFactor;
sPos := sPos-nFactor;
Chart1.Series[i].CustomVertAxis := Chart1.CustomAxes[eje];

// EJE HORIZONTAL CUSTOMIZADO
inc(eje);
Chart1.CustomAxes.Add;
Chart1.CustomAxes[eje].LabelsFont.Color:= Chart1.Series[i].Color;
Chart1.CustomAxes[eje].Axis.Color:= Chart1.Series[i].Color;
Chart1.CustomAxes[eje].Horizontal:= true;
Chart1.CustomAxes[eje].PositionPercent := pPercent;
pPercent := pPercent + nFactor;
Chart1.CustomAxes[eje].StartPosition := 0;
Chart1.CustomAxes[eje].EndPosition := 100;
Chart1.Series[i].CustomHorizAxis := Chart1.CustomAxes[eje];
Chart1.Series[i].CustomHorizAxis.IsDateTime;
Chart1.Series[i].XValues.DateTime := True;
Chart1.Series[i].CustomHorizAxis.DateTimeFormat := 'hh:mm';
Chart1.Series[i].CustomHorizAxis.LabelsOnAxis:= false;
Chart1.Series[i].CustomHorizAxis.Labels:= false;
Chart1.Series[i].CustomHorizAxis.Increment := DateTimeStep[dtOneHour];

//------------------------------------------------------------------------------
// ANOTACION COMO PUEDO REFERENCIARLA A CADA EJE HORIZONTAL CUSTOMIZADO?
anotacion := TAnnotationTool.Create(self);
Chart1.Tools.Add(anotacion);
anotacion.Text:= TRIM(ListaItemsGrafico.Strings[i]) + ' ' +
TRIM(ListaDescItemsGrafico.Strings[i]) + ' ' +
TRIM(ListaUnidades.Strings[i]);
anotacion.Shape.CustomPosition := true;
anotacion.Shape.Left := 50;
anotacion.Shape.Top :=Chart1.Series[i].CustomHorizAxis.IStartPos;
if Odd(i) then
anotacion.Shape.Font.Color := clGreen
else
anotacion.Shape.Font.Color := clNavy;
anotacion.Shape.Font.Style := [fsBold];
anotacion.Shape.Transparent:=true;
//-------------------------------------------------------------

inc(eje);
Valores(i);
end;
end;




Saludos

Rafael Bernardo
Proceso de Datos
Celulosas de Asturias S.A.
Navia
Asturias

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 Dec 23, 2005 10:40 am

Hola Rafael,

El problema puede deberse a que cuando quieres posicionar las TAnnotationTool, el chart aun no se ha dibujado y en consecuencia la posición de los ejes no se ha inicializado.

Para solucionarlo tendrias que situar este código en el evento AfterDraw de TChart. Quiza, para forzar que se ejecute este código sea necesario utilizar Chart1.Draw;.

Si aun asi no consigues solucionar el problema, agradeceriamos que nos mandases un proyecto que nosotros podamos ejecutar para reproducir el error aquí. Puedes mandar tus ficheros a nuestros newsgroups públicos. Concretamente en [url]news://www.steema.net/steema.public.attachments[/url].

Si és possible, agradeceriamos que escribieras futuros mensajes en inglés para que el resto de clientes/usuarios puedan beneficiarse de las respuestas publicadas.
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