Page 1 of 1

Annotation Tool

Posted: Fri Dec 23, 2005 8:11 am
by 8437686
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

Posted: Fri Dec 23, 2005 10:40 am
by narcis
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.