procedure Histogramm(Px_werte,Panzahl_werte : TStringList; Py_max : Integer);
var i,j,z,z2,z3,Py_laenge,y_einteilung,y_beschriftung : Integer;
begin
Py_laenge := 300;
//y-Achse einteilen
z3:=1;
while Py_laenge
mod Py_max <> 0
do
begin
Inc(Py_max);
Inc(z3);
end;
y_einteilung := round(Py_laenge/Py_max);
SetRoundMode(rmUp);
y_beschriftung := round(Py_max/y_einteilung);
SetRoundMode(rmNearest);
//X-Achse mit Beschriftung zeichnen
Form1.image1.Canvas.MoveTo(50,350);
//x-Achsen Startpunkt
i := 100;
z := 0;
repeat
Form1.image1.Canvas.LineTo(i,350);
//x-Achse
if z < Px_werte.Count
then
begin
//Histokramm positive Flanke
Form1.image1.Canvas.LineTo(i,y_einteilung*(Py_max+z3-StrToInt(Panzahl_werte[z])));
//Waagerechte verbindung zw Flanken
Form1.image1.Canvas.LineTo(i+51,y_einteilung*(Py_max+z3-StrToInt(Panzahl_werte[z])));
Form1.image1.Canvas.LineTo(i+51,350);
//Histokramm negative Flanke
Form1.image1.Canvas.TextOut(i,355,Px_werte[z]);
end;
Form1.image1.Canvas.MoveTo(i,350);
Inc(i,50);
inc(z);
until z = Px_werte.Count+2;
//Y-Achse mit Beschriftung zeichnen
Form1.image1.Canvas.TextOut(25,350,'
0');
Form1.image1.Canvas.MoveTo(50,350);
//y-Achsen Startpunkt
Form1.image1.Canvas.LineTo(50,350-Py_laenge);
//y-Achse
z2 := 1;
i := 350;
repeat
if i<350
then
begin
Form1.image1.Canvas.TextOut(25,i,IntToStr(y_beschriftung*z2));
Form1.image1.Canvas.MoveTo(50,i);
Form1.image1.Canvas.Pen.Style := psDot;
Form1.image1.Canvas.LineTo(50+300,i);
Inc(z2);
end;
dec(i,y_einteilung)
until i < 350-Py_laenge;
end;