Annotation Tool
Posted: 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
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