Tchart

Tengo una duda de como hacer cuando tengo una grafica y en tiempo de ejecucion quiero agregar varias series de acuerdo a los almacenes que tengo en una empresa pero esa cantidad puede variar y como no tengo la cantidad exacta serie crear en ejecucion deacuerdo a una cantidad que me traiga de una consulta pero al crearlos segidamnete con
for....cantidad de almacenes en ese momento
variable:TBARSERIES.CREATE()
Chart1. Add(variable)
...
.. Agregar información
..
end;
No puedo utilizar la misma variable para crear otra serie como le puedo hacer porque no puedo crear variables en ejecución de que otra manera le puedo hacer.

1 respuesta

Respuesta
1
Precisamente hace poco acabo de desarrollar un sistema con gráficas, y en cierto punto me tope con ese problema ademas que TChart tiene muchas propiedades y te haces bolas... bueno mira para empezar usa el componente TDBChart el cual solo le conectas el query designas tus POR y Y's y lo que quieras mostrar ahora bien, como las series son dinámicas es decir que no sabes cuantas pueden salir, es por eso que la tienes que crear en runtime esta bien el código que me mandas, pero creo que te hace falta hacerle un Parent... pero mejor dejalo así.
Hay una propiedad llamada clone el cual te copia o te hace igual una serie a otra creo que esto te funcionaria creas una serie por default luego en la clonas cuantas veces sean los almacenes y lo único que harías es cambiarle los datos en base a cada almacen...
Si tienes más dudas delphi trae un demo muy bueno sobre el TChart checalo ...
Bueno espero te sirva de algo.
Si esta bien pero como le puedo hacer para clonar si me puede mandar un ejemplo de como hacerlo para clonarlo es que estoy utilizando TCHART porque es una gráfica que gráfica varios periodos y cada periodo hago una consulta porque no puedo hacerlo en el mismo query ya que no puedo agrupar un rango de fechas y por eso mismo de cada barra hago una consulta y la meto por código el resultado pero eso como le hago para agregar más series utilizando una sola variable como me dices que la propiedad clone esta bien pero si me puedes enviar un ejemplo de como utilizar esa propiedad muchas gracias.
Ok mira:
Así va el código para agregar una serie en runtime, pones un botón dentro del click del botón pones este código al presionarlo miraras que ha agredao una nueva serie al tu chart1:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Series:TLineSeries;
begin
Series:= TLineSeries.Create(self);
Series.Name := 'Series3';
Series.Active:=true;
Chart1.AddSeries(Series);
end;
Si eso es lo que te mande primeramente pero con código no tan especifico.
Pero mi duda es esta si puedes hacer lo siguiente porque trate y supuestamente no puedo utilizar la misma variable.
procedure TForm1.BitBtn1Click(Sender: TObject);
var Series:TLineSeries;
begin
for x:=1 hata (cantidad de almacenes)
begin
Series:= TLineSeries.Create(self); ?que significa self?
Series.Name := Modulo.query.value;
Series.Active:=true;
Chart1.AddSeries(Series);
end;
end;
Osea crear las series con la misma variable de acuerdo a la cantidad de almacenes que tengo.
Muchas Gracias de antemano.
No, no hay ningún problema mira hice esto:
var Series:TLineSeries;
x:integer;
begin
for x:=1 to 2 do
begin
Series:= TLineSeries.Create(self);
Series.Name := 'Series3'+IntToStr(x);
Series.Active:=true;
Chart1.AddSeries(Series);
end;
Use un ciclo con la misma variable y cree dos series lógicamente con diferente nombre como puedes ver una serie se llamaría Serie31 y la otra Serie32 y no te debe marcar ningún error yo probé este código que estoy enviado y me creo dos series.
El self significa así mismo si te das cuenta estas declarando Series:TLineSeries; ¿Entonces al ponerle create(self) le estas diciendo que se cree así mismo porque?, porque porque ya fue declarada de ese tipo así que lo único que se necesita es crearlo.
Ok si tienes más dudas comentalas y haremos lo posible para que resuelvas tu problema.
Para eso tienes que tener creada una serie o después de
Chart1.add();
Pones las especidficacion de la serie.
Bueno ahorita lo hice con mediante otra serie ya creada, pero no necesariamente tienes que tener ya una serie creada, pero si no la tienes creada tienes que definir que tipo de barra quieres, los labels, etc. y si para todas las series tienen el mismo formato solo diferentes valores entonces ya solo cambiarías los valores.. si me explico. Pero igual y lo puedes hacer todo desde abajo...
Pues en mi problema si es lo mismo solamente cambio el nombre dela serie y los valores pero entonces con solamente con ponerle self al crearla sabe que es copia de la serie que tienes porque en mi caso son barras solamente en lugar de declarar TLineSeries seria TBarSeries eso es lo que cambiaría y al salirme o querer graficar otros datos como le hago al destruirla se borra todo o como le hago para que cuando quiera graficar otros datos no se me agreguen juntos con los que ya grafique solamente tiene algún tipo de propiedad como las de las series por ejemplo un chart1.clear; para que me borre los datos de la serie.
En cuanto la clase si, si tienes TBarSeries o TLines o cualquier otra solo la declaras y luego la creas, para eliminar la series que creaste solo pon Series. Free; y eso las destruirá. Si de pronto no quieres borrarla solo que no se vea en el chart1 tu designas cual serie quieres que se vea, dale doble click y posiciónate en la pestaña donde están las series del lado izquierdo de cada serie esta un checkbox que indica si quieres que se muestre o no.
Ok.
Disculpa estaba probando el código y si me genera las series pero solamente me muestra la serie creada en ese momento pero las otras solamnet me crea la serie pero al ponerle valores no me muestra nada en la gráfica lo que hice fue esto:
for x:=1 to 2 do
begin
Series:= TLineSeries.Create(self);
Series.Name := 'Series3'+IntToStr(x);
Series.Active:=true;
Chart1.AddSeries(Series);
Series.Add(5,'',clActiveCaption);
end;
for x:=1 to 2 do
begin
Series:= TLineSeries.Create(self);
Series.Name := 'Series3'+IntToStr(x);
Series.Active:=true;
Series.Add(5,'',clActiveCaption);
Chart1.AddSeries(Series);
end;
Y no funciona ninguna de las dos formas.
Pero cuando las creas por código con active las estas activando que se vean y lo corrí y no se ven solamente en la legenda aparecen que están creadas no se si les falta algo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas