TChart: Anzahl der zu erstellenden Series zur Laufzeit festlegen



  • Klar kannst du das so machen.
    Warum willst du eigentlich die Serien noch separat in den vector packen? Jedes Chart verwaltet doch sowieso seine eigene Serienliste.



  • wie arbeite ich konkret mit der SeriesList bzw. wie leg ich damit zur Laufzeit neue Series an? Leider ist die Hilfe dazu nur sehr mager.



  • Hier ein Beispiel:

    Chart1->RemoveAllSeries(); //vorher alle Series löschen
    
    //Eine Linien Serie anlegen
    TLineSeries *Serie = new TLineSeries(Chart1);
    
    //gewünschte Eigenschaften setzen
    Serie->Title = "Der Titel";
    ...
    
    //Serie dem Chart hinzufügen
    Chart1->AddSeries(Serie);
    


  • Hallo,

    Das hier:

    //Serie dem Chart hinzufügen
    Chart1->AddSeries(Serie);
    

    ist übrigens äquivalent zu

    //Serie dem Chart hinzufügen
    Serie->ParentChart = Chart1;
    


  • vielen Dank



  • ich möchte in einer Schleife zuerst eine vorgegebene Anzahl an Series anlegen (Anzahl erst während der Laufzeit bekannt).

    for (int i=0; i<anzahlCharts; i++) {
        serie = new TLineSeries(Chart1);
        Chart1->AddSeries(serie);
    }
    

    Die Series füll ich erst später an anderer Stelle mit Daten. Der Zugriff erfolgt dann mit:

    for (int i=0; i<Chart1->SeriesCount(); i++)
        Chart1->Series[i]->AddXY(....);
    


  • Ja.
    Hast du dazu auch eine Frage oder wolltest du nur wissen ob das so geht?



  • keine Frage mehr. Programm funzt so 🙂



  • Ich hab nochmal eine Frage zum deleten der series-Objekte:

    Hier nochmal der Ablauf.

    Als private im Header der Form deklariert:

    TLineSeries* serie1;
    TLineSeries* serie2;
    

    Das Programm wird über einen Button gestartet.

    void __fastcall TfrmMain::btnStartClick(TObject *Sender) {
        const int anzahlCharts = Edit1->Text.ToInt();
        if (anzahlGraphen > 0) {
            for (int i=0; i<anzahlCharts; i++) {
                Chart1->RemoveAllSeries();
                Chart2->RemoveAllSeries();
    
                //Series in Charts anlegen:
                for (int i=0; i<anzahlGraphen; i++) {
                    serie1 = new TLineSeries(Chart1);
       	        serie2 = new TLineSeries(Chart2);
                    Chart1->AddSeries(serie1);
                    Chart2->AddSeries(serie2);
                }
                measure(); //hier wird gemessen und Werte in series geschrieben
    
                delete serie1;
                delete serie2;
            }
        }
    }
    

    Muss hier nur einmal deletet werden so wie dargestellt? Oder muss nicht deletet werden und TChart macht das automatisch?



  • Hallo,

    Da du bei der Erstellung der Serie den Chart als Owner angegeben hast werden die Serien auch deleted wenn der Chart selbst deleted wird (meist am Programmende).
    Wenn du die Serien selbst löschen willst, solltest du da als Owner 0 angeben. Denke auch daran, die Series erst vom Chart zu trennen (RemoveSeries oder Series->ParentChart = 0) bevor du sie löschst.


Anmelden zum Antworten