Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problema Representado (https://www.clubdelphi.com/foros/showthread.php?t=84135)

DugT 13-09-2013 12:51:34

Problema Representado
 
Buenas,

Estoy haciendo un programa para poder modificar señales dependiendo de unos parámetros pero a la hora de representarlas no me actualiza la gráfica. Es decir, me representa el primer bloque de 512 muestras correctamente, pero luego no elimina el anterior antes de representar el siguiente. He probado con varias funciones pero ninguna me da resultado, ¿qué función podría hacer eso?? Dejo el código que tengo por si ayuda.

Código SQL [-]
void __fastcall TForm1::Button5Click(TObject *Sender)
{

        float x[TB],y[512],z[512],l;


        l=0;


         for( int i=0; iAddXY(i,bloque[i],"Null",clTeeColor);

                x[i]=bloque[i];


         }
         Chart1->Refresh();

         l++;


}

Muchas gracias de antemano!!:)

PD: Esto ahora esta asignado a un botón, pero posteriormente se lo asignare a un contador para que se haga automáticamente mientras haya señal a la entrada.

ecfisa 13-09-2013 13:42:18

Hola DugT y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a leer nuestra Guía de estilo.

Con respecto a tu mensaje, creo que debes haber copiado mal el código al mensaje ya que como está no podría compilar. La estructura del ciclo for es incorrecta, debería ser:
Código:

  for (inicio-expresion; condicion-expresion; incremento-expresión) [{]
    declaración;
[}]

Sobra una llave dentro del evento OnClick y es incorrecto el uso del método AddXY, debe ir precedido de su serie, por ejemplo:
Código:

  Chart1->Series[0]->AddXY(AXValue, AYValue, Label, Color);
  // o también podría ser este modo:
  Series1->AddXY (AXValue, AYValue, Label, Color);

Saludos. :)

DugT 13-09-2013 14:21:48

Muchas gracias!!

Tienes razón xD, no se porque la previsualización del mensaje me salia todo bien, y cuando se ha enviado ha salido ese engendro xDD. Lo siento.
El código que tengo para representar en la gráfica es este:

Código PHP:

void __fastcall TForm1::Button5Click(TObject *Sender)
{
         for( 
int i=0i<TB i++){

                
Series1->AddXY(i,bloque[i],"Null",clTeeColor);
                
Series2->AddXY(i,bloquef[i],"Null",clTeeColor);

         }
         
Chart1->Refresh();



He probado con Refresh(), CleanupInstance(), y un millón de funciones que vienen por ahí y no consigo refrescar la maldita gráfica :confused:


Muchas gracias por la ayuda!! A ver si ahora que esta bien copiado el código a alguien se le ocurre una función para hacer eso! :D

ginkaku 13-09-2013 15:02:39

Perdon nose si te puedo ayudar pero hace varios años hice una grafica parecida y cargaba los valores de esta forma:
Código Delphi [-]
procedure TForm1.VerEjeCoor1Click(Sender: TObject);
var
x1,y1,x2,y2 : Real;
i : word;
begin
    series1.clear;

  for i := 1 to MA.Filas-1 do
  begin
   x1 := MA.ObtenerElemento(i,1); //esto es rebundante solo obtenia datos de una matriz
   y1 := MA.ObtenerElemento(i,2);
   x2 := MA.ObtenerElemento(i+1,1);
   y2 := MA.ObtenerElemento(i+1,2);
   series1.AddArrow(x1,y1,x2,y2,'Union[ '+IntToStr(i)+' ]', clGreen);
  end;
end;
Se que esta en delphi pero en 5 seg lo puedes llevar a c++ que tambien es mi leguaje preferido. Espero te sirva un saludo

ecfisa 13-09-2013 15:04:55

Hola DugT.

No sé si interpreto cuál es el problema pero hice una prueba simple:
Código:

#define TB 20

int bloque[TB];
int bloquef[TB];

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  randomize();
  for(int i = 0; i < TB; i++) {
    bloque[i]  = random(200)+1;
    bloquef[i] = random(200)+1;
  }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for( int i=0; i < TB ; i++){
    Series1->AddXY(i,bloque[i],IntToStr(bloque[i]), clTeeColor);
    Series2->AddXY(i,bloquef[i],IntToStr(bloquef[i]), clTeeColor);
  }
}

Y obtengo el gráfico:


Saludos :)

Edito: Si pensas que te puede servir de algo te adjunto los fuentes de la prueba.

DugT 13-09-2013 19:07:01

Muchas gracias por responder!!

La gráfica si que se me representa correctamente, pero esa función esta asignada a un botón, entonces debe representar diferentes vectores cada vez que lo pulso. Mi problema reside en que, cuando pulso el botón representa el nuevo vector, pero no elimina el representado anteriormente, con lo cual solapan y se crea un gráfico donde no se ve nada :S. Mi duda era, si hay alguna función para eliminar lo que se ha representado con anterioridad para representar nuevo los nuevos valores del vector.

De nuevo, muchas gracias! :)

ecfisa 13-09-2013 19:45:51

Cita:

Empezado por DugT (Mensaje 466859)
Mi duda era, si hay alguna función para eliminar lo que se ha representado con anterioridad para representar nuevo los nuevos valores del vector.

Haber comenzado por ahí... :)

Código:

  Series1->Clear();
  Series2->Clear();

Saludos :)

DugT 13-09-2013 20:35:31

Definitivamente algo me odia, xD. Esta mañana he probado esa misma función no me iba y ahora todo perfecto jajajaja.
En fin, muchísimas gracias a todos por responder y ayudarme a solucionar mi problema! Si en el futuro os puedo ayudar no dudaré en hacerlo.

Nos leemos por aquí! Saludos!!:)


La franja horaria es GMT +2. Ahora son las 14:16:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi