TChart Beispiel



  • Hast du die Serien auch zugefügt? Sind das TLineSeries Objekte? Du solltest statt clNone besser clTeeColor nehmen.



  • Steht denn die Axenskalierung auf Automatic?
    Im Code kannst du das z.Bsp. für die x-Achse so einstellen

    Chart1->BottomAxis->Automatic = false; // Automatik abschalten
    Chart1->BottomAxis->AutomaticMaximum = false; // Automatik für maximum abschalten
    Chart1->BottomAxis->AutomaticMinimum = false; // Automatik für Minium abschalten
    Chart1->BottomAxis->SetMinMax(4.0, 6.0); // Minimum auf 4 und Maximum auf 6 eingestellt.
    

    Bei der y-Achse wäre das dann z.Bsp. LeftAxis



  • danke! war sehr hilfreich ^^



  • hm.. also habe mal bei AddXY versucht das x aus nem array einzubinden, jetzt kommt da so ne tolle ( 😉 ) Fehlermeldung: List Index out of bounds..
    kann mir da wer helfen, wo ich da falsch überlegt habe?

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Tchart2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int series1[30][30];
    //---------------------------------------------------------------------------
    
    void Array_fuellen()
    {
    int i=0;
       for (int x=30; x>0;x--)
          for (int y=30;y>0;y--)
          {
             series1[x][y]=i;
             i++;
          }
    }
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       Chart1->BottomAxis->Automatic=true;
       Chart1->BottomAxis->AutomaticMaximum=true;
       Chart1->BottomAxis->AutomaticMinimum=0;
       Chart1->LeftAxis->Automatic=false;
       Chart1->LeftAxis->AutomaticMaximum=false;
       Chart1->LeftAxis->AutomaticMinimum=false;
       Chart1->LeftAxis->SetMinMax(0,500);
    
       Array_fuellen();
    
       int i=0;
          for (int x=30; x>0;x--)
          for (int y=30;y>0;y--)
          {
    
             Chart1->Series[1]->AddXY(series1[x][y], 4,"",clNone);
             i++;
          }
    }
    //---------------------------------------------------------------------------
    


  • Du greifst bei series1[x][y] auf den Index 30 (sowohl x als auch y zu). Damit liest du über die Arraygrenze, da dein Index ja nur bis 29 geht. Warum läuft deine Schleife eigentlich rückwärts. Ich sehe da keinen Sinn drin (außer Verwirrung stiften).
    Hat dein Chart denn 2 Serien? Hier

    Chart1->Series[1]
    

    greifts du ja auf die Zweite zu.



  • also das mit Verwirrung stiften ist wohl wahr, aber das hab ich ja nur als Beispiel geschrieben..

    und jetzt hab ich den fehler, war ja nur eine linie (beim letzten warens zwei),
    also auf die falsche zugegriffen ^^'

    danke!



  • Chart hat eine Funktion SeriesCount(), welche dir die Zahl der vorhandenen Series zurückgibt.



  • Du greifst bei series1[x][y] auf den Index 30 (sowohl x als auch y zu).

    Kann mir jemand sagen, wie man oben die Indexüberschreitung übergehen kann,

    also konret mit Codebeispiel, wie es richtig wäre
    Danke
    LG Eliza



  • So etwa

    void Array_fuellen()
    {
    int i=0;
       for (int x=0; x<30; ++x)
          for (int y=0;y<30; ++y)
          {
             series1[29-x][29-y]=i;
             i++;
          }
    }
    


  • Hallo,

    ich will jetzt Werte für eine Graphik aus einem Memofeld entnehemen:
    Code:

    Chart1->Series[0]->AddXY(j,Memo1->Lines[j],"",clTeeColor);
    

    Es kommt die Fehlermeldung:

    [C++ Fehler] UnitGraphik.cpp(326): E2034 Konvertierung von 'TStrings' nach 'double' nicht möglich

    Ich verstehe es nicht, weil doch im Memo alles als String drinsteht.
    Wozu die Konvertierung. Und wie macht man eine String/Double Konvertierung?

    Weiß jemand wie man es richtig schreibt.

    LG Eliza



  • Versuch mal so:

    Chart1->Series[0]->AddXY(j,StringToFloat(Memo1->Lines->Strings[j]),"",clTeeColor);
    


  • Danke, hab's probiert, aber es kommt die Meldung:

    [C++ Fehler] UnitGraphik.cpp(326): E2268 Aufruf der undefinierten Funktion 'StringToFloat'



  • sorry, war mein Fehler:

    Chart1->Series[0]->AddXY(j,StrToFloat(Memo1->Lines->Strings[j]),"",clTeeColor);
    

    so müsste es gehen



  • Ich habe es auch mit StrToFloat probiert, aber da kommt dann die Meldung:

    [C++ Fehler] UnitGraphik.cpp(326): E2034 Konvertierung von 'TStrings' nach 'AnsiString' nicht möglich
    

    Verstehe ich absolut nicht, warum er mit String nicht zufrieden ist ??

    LG
    Eliza



  • tut mir leid, da bin ich überfragt.
    Bei mir kommt der Fehler nicht.



  • Hallo Sonic,

    wenn dich interessiert, ich hab's rausbekommen:

    Chart1->Series[0]->AddXY(j,StrToFloat(Memo1->Lines->Strings[j]),"",clTeeColor);
    

    so funktionierts 😉
    LG
    Eliza



  • [quote="*Eliza"]Hallo Sonic,

    wenn dich interessiert, ich hab's hinbekommen:

    Chart1->Series[0]->AddXY(j,StrToFloat(Memo1->Lines->Strings[j]),"",clTeeColor);
    

    dein Vorschlag war schon richig, ich habe irgendwie einen Fehler im Code reingebracht.
    Danke.

    LG Eliza



  • Ich bin vor Freude fast vom Stuhl gefallen 🙂



  • Hallo @all,

    und noch eine Frage zu TChart:

    Weiß jemand, wie man es in TChart einrichtet oder programmiert, dass stellenweise keine durchgezogenen Linien gemacht werden.

    z.B ich habe die Werte 1,2,3,4,5,6,7,8,9 (Beispielwerte jetzt)

    Der Grapfh soll z.B von 1-4 eine durchgezogene Linie zeichnen.
    5 aussparen, (aber vielleicht einen Punkt hinmachen)
    und dann wieder von 6-9 eine durchgezogene Linie.

    Vielleicht weiß es hier ja jemand. Danke für die Antworten vorab.

    LG Eliza



  • Das geht so:

    AnsiString Beschriftung_X_Achse = "irgendwas";
    
    Chart1->Series[0]->AddNull(Beschriftung_X_Achse);
    

Anmelden zum Antworten