Arbeiten mit TChart



  • Hallo sonic,

    was ist in meinem Code der Fehler:

    int j;
    int ArrayTest[10];
    for (int i=1;i<11;i++)
    {
       ArrayTest[j]= i;
    
    }
    
    Chart1->Series->Add(ArrayTest[j]);
    

    ....und wie wäre er richtig?
    LG
    Eliza



  • Die Funktion "Add()" braucht 3 Eingabeparameter

    Auszug aus der Hilfe zum TChart:

    //---------------------------------------------
    function Add(Const AValue:Double; Const ALabel:String; AColor:TColor):LongInt; virtual;

    Beschreibung

    Die TChartSeries-Methode Add dient zum Einfügen neuer Reihenpunkte, wenn Sie den X-Wert des Punktes nicht kennen.

    Diese Funktion fügt einen neuen Punkt in die Reihe ein. Der neue Punkt hat nur Y-Werte. Der X-Wert wird automatisch berechnet.

    Der Parameter AXLabel ist optional (kann leer bleiben).

    Der Parameter AColor ist optional (kann clTeeColor entsprechen).
    //--------------------------------------------

    Dann müsste der Aufruf so aussehen:

    Chart1->Series[0]->Add(Datenwert ,X-Label , Farbe);
    


  • sonic_1233 schrieb:

    Die Funktion "Add()" braucht 3 Eingabeparameter

    wie du schon richtig kopiert hast, sind die 2 letzten Parameter optional, also reicht auch 1 Parameter.

    außerdem ist das hier fehlerhaft:

    int ArrayTest[10];
    //for(int i=1; i<11; i++)
    for(int i = 0; i < 10; i++)
    {
       //ArrayTest[j]= i;
       ArrayTest[i]= i;
    }
    

    greetz KN4CK3R



  • Hallo,

    ich habe jetzt folgende Array mit int Werten, wie bringe ich die Inhalte das Arrays in einen Chart, so das er mit ihnen einen Graphen zeichent:

    int Xarray[4];
    
    for(int i=0;i<4;i++)
    {
      Xarray[i]=i+1;
      Memo1->Lines->Add(Xarray[i]);
    }
    

    Ich nehme an es geht mit Series, aber weiter weiß ich es nicht.

    Chart1->Series....
    

    ????

    LG
    Eliza



  • Wollte hiermit den Thread wieder nach oben verschieben 😉





  • Danke für die Dokumentation, aber ich stelle meine Fragen eigentlich nur, wenn ich aus der Dokumentation auch nicht recht schlau werde. Und das ist für einen Anfänger auch manchmal richtig schwierig.

    Was ich machen will ist aus zwei Memofelder MemoX (mit x-werten) und Memoy (mit y werten) diese Werte in einen Chart zu bringen der dann Anhand der X,Y Werte den Graphen zeichnet. Die xund y- Werte stehen in Arrays.
    Es müssen also keine Werte extra von Chart berechnet werden, die gibt es bereits.
    Ich brauche nur eine Syntax-Anregung wie aus diesen Werten Punkte im Graphen erzeugt werden können.

    Chart1-Series(XArray, YArray....
    

    funktioniert so wohl nicht. Aber wie könnte das funktionieren?

    LG
    Eliza





  • Ja, ich habe es mir gerade durchgelesen.
    Es ist verwirrend, weil man nicht selbst weiß, ob es für mein Problem brauchbar ist oder ob der Fragesteller seinerseits fehler gemacht hat.
    Aber danke für den Hinweis. Ich denke ich habe mein Problem gut beschrieben nach was ich suche.
    Hier also nochmal meine Problemstellung (da ich allmählich dass Gefühl bekomme der Verlauf des Thrad hält eventuell andere davon ab hier behilflich zu sein)

    Nochmal die Problemstellung:
    Was ich machen will ist aus zwei Memofelder MemoX (mit x-werten) und Memoy (mit y werten) diese Werte in einen Chart zu bringen der dann Anhand der X,Y Werte den Graphen zeichnet. Die xund y- Werte stehen in Arrays.
    Es müssen also keine Werte extra von Chart berechnet werden, die gibt es bereits.
    Ich brauche nur eine Syntax-Anregung wie aus diesen Werten Punkte im Graphen erzeugt werden können.

    Chart1-Series(XArray, YArray....
    

    funktioniert so wohl nicht. Aber wie könnte das funktionieren?
    Wer mir also konkret etwas dazu sagen kann, bin ich sehr dankbar.

    LG Eliza



  • Z.Bsp. so

    const int SIZE = 30;
    int xarray[SIZE];
    int yarray[SIZE];
    // jetzt noch befüllen
    // dann Serie befüllen
    for( int i=0; i<SIZE; ++i) {
       Chart1->Series[0]->AddXY(xarray[i], yarray[i],"",clNone); 
    }
    

    Natürlich muß die serie schon existieren.



  • Und wenn du den Code von Braunstein nicht zum Laufen kriegst,
    dann würde ich vorschlagen, dass du deine Daten einfach auf Milimeterpapier
    zeichnest.

    Mfg
    sonic



  • Danke Braunstein, habe es hinbekommen 🙂
    LG Eliza



  • Hallo,

    ich habe den Code geschrieben:

    Chart1->Series[0]->AddXY(j,StrToInt(mlk1.mMilch[j]),"",clTeeColor);
    

    Für ersten ArrayInedex wird die Graphik auch richtig angezeigt. Aber sobald ich den zweiten, dritten usw. anzeigen will, kommen nur "wilde" Graphiken heraus.
    Kann es daran liegen, dass die Graphik die zuvor drin war gelöscht/gecleart werden muss?
    Woran kann es liegen?
    Danke für die Antworten im Voraus!

    LG Eliza



  • Was für eine Grafik? Was hast du gemacht?



  • Danke Braunstein, aber ich habe jetzt die Sache mit einem Memofeld gelöst.
    Also in sofern ist sie jetzt nicht akut aktuell.

    Aber mal eine andere Frage
    Ich möchte den Chart-Titel je nach ausgewählten Radiobutton geändert haben
    Der Code:

    if((RadioGroup1-> ItemIndex)==1)
    {
    
    Chart1->Title="Milch";
    

    Es kommt die Fehlermeldung:

    [C++ Fehler] UnitGraphik.cpp(44): E2034 Konvertierung von 'char *' nach 'TChartTitle *' nicht möglich
    

    Warum funktioniert das so nicht?

    LG
    Eliza



  • Chart1->Title->Text->Text = "test";
    

    Hört sich merkwürdig an, aber funktioniert



  • Du solltest dich wirklich ein wenig mehr mit C++, insbesondere mit Klassen beschäftigen.
    Die Fehlermeldung sagt ganz klar aus, das TChart::Title vom Typ Zeiger auf TChartTitle ist und du diesem Typ keinen const char* (dein String) zuweisen kannst.
    In so einem Fall ruft man die Hilfe von TChart auf und schaut sich an, was für ein Typ TChartTitle ist und wenn es eine Klasse ist, welche Memberfunktionen diese hat.
    In diesem Fall würdest du dort z.Bsp. die Eigenschaft Text vom Typ TStrings finden.
    Das schaut schonmal interessant aus, also schauen wir doch gleich mal in die BCB-Hilfe nach TStrings und finden dort die Methode Add welche einen String hinzufügt (genau wie bei TMemo::Lines).
    Also kann man folgendes machen:

    Chart1->Title->Text->Add("Milch");
    


  • Hallo Braunstein,

    danke für deine Hilfe. Es ist tatsächlich so,dass ich nicht so recht mit der Hilfe noch zurechtkomme und nicht genau weiß wie ich nach richtigen vorgehensweisen suche. Aber deine Anregung und dein Rat war sehr hilfreich.
    Danke dafür!
    LG
    Eliza



  • Bezüglich der Hilfe. Hast du das hier schon gelesen?
    http://www.junix.ch/bcb/help/hilfe.html



  • Hallo Braunstein,

    danke für diese anschauliche Erklärung der Hilfefunktion.
    Die ist wirklich gut.
    Aber du sagst ja selber,dass du mit der Intuition mit der Hilfe in etwa 3 Jahre Erfahrung hast im gegensatz zu mir C++Builder jetzt gerade mal 3 Wochen!
    Ich komme mit der Hilfe, wie du selbst erkannt hast, als Anfänger natürlich nur sehr schwierig voran, die Hilfe ist ein Kapitel für sich.
    Aber wenn ich Fragen stelle, die ein erfahrner Programmierer für "banal" hält,dann liegt das nicht daran, dass ich zu bequem bin in der Hilfe zu wühlen, sondern dass ich es schliecht weg (noch) nicht kann.
    Manchmal ist hier oft schon eine Lösung in wenigen Minuten gekommen, wo ich selbst vielleicht stundenlang erfolglos herumgetüftelt hätte.
    Ich denke aber ich habe auch durch diese Antworten durchaus dazu gelernt.
    Weil ich ja tatsächlich auch mitdenke (oder es wenigstens versuche 😉
    Ich denke es liegt tatsächlich an jedem selbst, ob er das Forum für seine eigenen Fortschritte nutzt, oder nur für seine "Denk-und-Arbeitsfaulheit".
    Ich gehöre aber definitiv zu den ersteren. Will ja dazu lernen. Deshalb ist mir jeder Rat willkommen. Also danke nochmal für deine Mühe mit der Hilfe-Erklärung 🙂
    LG
    Eliza


Anmelden zum Antworten