TChart
-
Du hast eine Schleife die von der Anzahl der Memolines abhängt. Dann liest du mit ADDXY die Werte ins Chart ein. Woher kommt h?
-
Ursprünglich sah es so aus:
Chart1->Series[1]->AddXY(StrToInt(Memo7->Lines->Strings[i]),StrToInt(Memo3->Lines->Strings[i]),"", clRed);Der zweite Versuch sieht so aus:
double h = StrToInt64(Memo3->Lines->Strings[i]);
Chart1->Series[1]->AddXY(StrToInt(Memo7->Lines->Strings[i]),h,"", clRed);Dort wollte ich sicher sein, dass der Funktion AddXY auch der richtige Wert übergeben wird. (Zahl (0 bis 65500) vom Typ double). Durch das Einfügen eines Breakpoints konnte ich sehen, dass h den Wert aus dem Memo Fenster hat!
-
Du kannst auf jeden Fall über 32000 Werte hinzufügen:
for (int x=0; x<=330000; x++) { Series1->AddXY(x,sin(x),x,clRed); }Ist zwar ein wenig sinnfrei...
-
und floats gehen auch:
for (float x=0; x<=10; x=x+0.1) { Series1->AddXY(x,sin(x),x,clRed); }
-
Das Problem ist nicht die Anzahl der Werte, sondern der Wert selber! Ist der Wert z.B. 6 geht alles super, ist der Wert z.B. 65000, dann geht nix mehr!
-
Wenn du dir einen Button aufs Form ziehst und den Code mit dem Sinus (oben) einfügst und sin durch x^2 ersetzt, siehst du das auch Werte über 32000 kein Problem darstellen (#include <math.h> nicht vergessen). Dein Problem liegt darin, daß du auf einen Wert zugreifst der nicht "da ist. Das ist zumindest meine Vermutung oder wie Christian meinte ein . oder , falsch interpretiert wird.
Aber: es liegt nicht am Chart, daß Werte über 32000 nicht akzeptiert werden.
-
Probiers mal so:
Series[1]->AddXY(StrToInt(Memo7->Lines->Strings[i]),i,StrToInt(Memo7->Lines->Strings[i]), clRed);
-
Series[1]->AddXY(70000,i,90000, clRed);So würde ich ja die Fehlersuche beginnen
dann jeden Druchlauf durch das Memo debuggen
Werte ggf. mit Messagebox ausgeben lassen
oder in ein neues TMemo schreiben
Oder loggen
-
So, die Lösung des Problems:
Chart1->LeftAxis->Maximum = 66000;
Mit der Automatik funktion ging es einfach nicht...warum auch immer!
Danke euch für eure Mithilfe!!
-
Stimmt, da hast du recht. Sorry, daß ich nicht gleich drauf gekommen bin. Bei der der Fehlermeldung:
Exception der Klasse EAccessViolation aufgetreten. Meldung: ´Zugriffsverletzung bei Adresse 40901083 in MOdul ´tee60.bpl´. Schreiben von Adresse 00920000´.
konnte nur:
Chart1->LeftAxis->Maximum = 66000;
die Lösung sein. Danke, daß du die Lösung hier auch anderen zur Verfügung stellst.