TChart ordnet Werte der X-Achse falsch zu



  • Hallo
    Ich habe folgendes Problem.
    Ich habe ein TChart das ich mit mehreren Kurven fülle.
    Nun ist das Problem wenn ich einer Kurve einen Wert wegnehme.
    dann wird dieser nicht automatisch zum nächsten verlängert sondern wird komplett rausgeschmissen und nicht dargestellt. Die eine Kurve ist dann kürzer als die anderen.
    Wie ist es möglich das die Komponente die Werte dann selbst nachzeichnet
    und net untern Tisch fallen lässt??
    Wenn ihr net wisst was ich meine probierts mal aus mit ner TDBChart und nem Button
    und folgendem Quellcode:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
      TLineSeries* MySeries;
      TChartAxis *Custom0;
      TChartAxis *CustomH;
    
      // Add horizontal Axis
      MyChartE->BottomAxis->Maximum = 6.0;
      MyChartE->BottomAxis->Minimum = 0.0;
    
      for (int i=0; i < 3; i++)
      {
        // Serie anlegen und Query zuweisen
        MySeries = new TLineSeries(MyChartE);
        MySeries->ShowInLegend = false;
    //  MySeries->FillSampleValues(10);
    
        MySeries->Clear();
        if ( i == 0)
        {
        MySeries->Add( 0,"" , clGreen);
        MySeries->Add( 0,"" , clRed);
        MySeries->Add( 0,"" , clBlack);
        MySeries->Add( 0,"" , clNavy);
        MySeries->Add( 0,"" , clYellow);
        MySeries->Add( 0,"" ,clBlue);
    
        }
        if ( i == 1)
        {
        MySeries->Add( 80, "", clGreen);
        MySeries->Add( 22, "", clRed);
        MySeries->Add( 60, "", clBlack);
        //MySeries->Add( 40, "", clNavy);
        MySeries->Add( 58, "", clYellow);
        MySeries->Add( 20, "",clBlue);
    
        }
        if ( i == 2)
        {
        MySeries->Add( 33, "", clGreen);
        MySeries->Add( 22, "", clRed);
        MySeries->Add( 44, "", clBlack);
        MySeries->Add( 45, "", clNavy);
        MySeries->Add( 11, "", clYellow);
        MySeries->Add( 0, "",clBlue);
    
        }
        // Serie dem Chart zuordnen
        MyChartE->AddSeries(MySeries);
        MyChartE->BottomAxis->
        // Skala (Achse) anlegen und der Serie zuordnen
        Custom0 = new TChartAxis(MyChartE->CustomAxes);
        Custom0->StartPosition   = 1;
        Custom0->EndPosition     = 100;
    //	Custom0->EndPosition     = hoehe * (i +1);
    //	Custom0->StartPosition   = hoehe * (i +1) - hoehe + 1;
        Custom0->PositionPercent = 0;
        Custom0->Horizontal = false;
        Custom0->Visible = true;
    
        MySeries->CustomVertAxis = MyChartE->CustomAxes->Items[MyChartE->SeriesCount() -1];
    
      }
    
      // Skalen neu aufteilen
      int anzahl = MyChartE->SeriesCount();
    
      if (!anzahl)
        return;
    
      int hoehe = 100 / anzahl;
    
      for (int i=0; i < anzahl; i++)   // 6 Achsen sind bereits defaultmässig vorhanden
      {
        MyChartE->Axes->Items[i +6]->EndPosition   = hoehe * (i +1);
        MyChartE->Axes->Items[i +6]->StartPosition = hoehe * (i +1) - hoehe + 1;
      }
    


  • Hallo,

    Wie entfernst du dies Werte denn? Warum nimmst du nicht AddXY?



  • Ich entferne die Werte nicht.
    Nur wenn ich z.B aus einer Datenbank Werte einlese
    und bei einer Datenbank wurde eben gerade dieser Wert für das Datum nicht abgespeichert dann sollte das Chart halt einfach eine line vom vorherigen zum nachfolgenden ziehen.

    Was ist der unterschied zwischen Add und Add XY?
    vor - nachteile?



  • Bei Add werden nur Y-Werte hinzugefügt. Die X-Werte werden dann generiert (einfach hochgezählt). Die Reihenfolge entspricht dann der Reihenfolge des Hinzufügens.
    Ich habe eigentlich gern immer etwas mehr Kontrolle über meine Wertepaare. Eigentlich hat AddXY keine Nachteile gegenüber Add. 🙂

    aLeXanDer.. schrieb:

    Nun ist das Problem wenn ich einer Kurve einen Wert wegnehme.

    Was soll das denn dann bedeuten?



  • Damit habe ich gemeint, wenn ich im Code mal einen Wert auskommentiere, hab ja nur getestet 🙂
    Werte werden also nicht gelöscht, kann nur sein das sie nicht vorhanden sind.

    Mit deinem Vorschlag hast du mir schon sehr sehr sehr weiter geholfen.
    Danke
    Noch ne Frage :

    Ich gib ihm das hier mit

    MyChartE->BottomAxis->Maximum = EncodeDate(2008,12,20);
      MyChartE->BottomAxis->Minimum = EncodeDate(2008,12,02);
      MyChartE->BottomAxis->Increment = DateTimeStep[dtOneDay];
      MyChartE->BottomAxis->Automatic = false;
    

    und dann befüll ich wie vorher mit XY 🙂
    aber jetzt bekomm ich keine Kurven mehr zu sehen
    er skaliert alles richtig wie vorher usw.
    aba das Chart ist praktisch leer
    Warum das aufeinmal?!



  • Hab auch das jetzt schnell gelöst 🙂
    beim befüllen , muss ich für den XWert auch Encode... angeben
    dann zeichnet er alles
    Gut
    Danke für die Hilfe 🙂



  • Stell Automatic erstmal wieder auf true und schau mal welchen Wertebereich deine Daten haben.


Anmelden zum Antworten