Es fehlt noch das Einfügen der Series in den Chart: Chart.AddSeries.
Es ist übrigens nicht nötig, die Series in einem eigenen Array zu speichern, der Chart macht das automatisch und stellt dafür die Liste Chart.Series[] zur Verfügung, die Anzahl der vorhandenen Series erhältst du über Chart.SeriesCount. Da Chart.Series[] jedoch für alle Series-Typen geeignet sein muss, wird jede Series nur in der primitivsten Seriesklasse gespeichert. Durch eine Typumwandlung zur TBarSeries kommst du aber an die BarSeries-Eigenschaften heran.
Hier ist dein Code etwas umgeschrieben, so wie ich es machen würde:
Code: Alles auswählen
procedure TFCollatz.MenuItem_LoadNewClick(Sender: TObject);
var
tf: textfile;
filename: string;
c, n: QWord; // warum so groß? Integer sollte es auch tun...
barseries: TBarSeries;
begin
filename := InputBox('New Graph', 'Filename:', '');
if fileexists(filename)
then begin
barseries := TBarSeries.Create(Chart);
barseries.SeriesColor := clRed; // Farbe für die Series
barseries.Title := filename; // Dateiname als Legendentext
Chart.AddSeries(barseries);
barseries.DisableRedrawing; // verhindert das Neuzeichnen des Chart nach Hinzufügen jedes Datenpunkts --> schneller
assignfile(tf, filename);
reset(tf);
repeat
readln(tf, c);
readln(tf, n);
barseries.AddXY(c, n);
until eof(tf);
closefile(tf);
barseries.EnableRedrawing // Chart-Neuzeichnen wieder aktivieren
end;
end;
Wenn du später die Series mit dem Index i wieder benötigst, geht das - ohne dein Chart_Series[]-Array - über
Code: Alles auswählen
var
barseries: TBarSeries;
....
barseries := TBarSeries(Chart.Series[i]);
// oder falls auch andere Seriestypen enthalten sind:
if Chart.Series[i] is TBarSeries then barseries := TBarSeries(Chart.Series[i]);
Achja, das noch: Wenn die x-Werte nicht äquidistant sind, werden die Balken unterschiedlich breit. Falls dich das stört, setze oben barseries.BarWidthPercent := bwPercentMin.
Und abschließend möchte ich noch auf die beiden BarSeries-Tutorials hinweisen (allerdings nur englisch):