TChart Beispiel
-
kann mir vielleicht jemand ein einfaches Beispiel, z.B. einer Sinuskurve für den TChart geben? Ich habe im Moment so meine Mühe damit
Es wechselt bei mir zwar immer die Skalierung, aber eine Linie ist leider nie zu sehen :S
(im Hilfemenu fand ich keine Beispiele, bzw. nur solche in Pascal geschrieben, die mir nicht weiterhelfen :S )mfg
wolfshuendchen
-
Zeige doch mal was du gemacht hast.
-
Also, ich hab da mal TChart auf das Form eingefügt und 2 Buttons für 2 verschiedene Tests
Beim 1. Button ist bei onClick:
Chart1->Series[1]->AddXY(5, 4,"",clNone);
Chart1->Series[1]->AddXY(5, 100,"",clNone);
und beim 2. Button:
Chart1->Series[0]->AddXY(100, 300,"",clNone);
Chart1->Series[0]->AddXY(200, 300,"",clNone);und da seh ich einfach nix
Border Width ist jeweils auf 2 und Visible eingestellt
-
okay.. eigentlich habe ich ein ganz anderes Problem, dass die Achsen eben Wechseln... ich hab die jetzt mal umgestellt und nun seh ich sogar die Linien ^^'
-
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 einstellenChart1->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? HierChart1->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