Die von Samso vorgeschlagene Lösung sieht schon sehr gut aus. Habe das mal in den Source gepackt, der sieht nun so aus:
Delphi-Quellcode:
procedure TForm82.Button1Click(Sender: TObject);
var
L: Integer;
Val, MaxVal: Extended;
NPotenz: Integer;
YDiv, YNorm: Double;
YResult: Double;
begin
with chart1 do begin
series1.clear;
title.Text.Text := 'Monatliche Umsätze im Jahr 2017';
Maxval := 0;
sgUmsatz.cells[0, 0] := 'Monat';
sgUmsatz.cells[1,0] := 'Betrag';
sgUmsatz.cells[2,0] := 'Wert Y-Achse';
for L := 1 to 12 do begin
sgUmsatz.cells[0, L] := FormatDateTime ('mmm', StrToDate ('01.01.2017') + ((L-1) * 33));
Val := Random (TButton(sender).tag);
MaxVal := max (MaxVal, val);
sgUmsatz.cells[1, L] := Val.ToString;
series1.Add (StrToFloat (sgUmsatz.cells[1, L]), sgUmsatz.cells[0,L], clGreen);
end;
end;
NPotenz := trunc(Log10(MaxVal));
YDiv:= IntPower(10, NPotenz);
YNorm := trunc(MaxVal / YDiv);
if YNorm<=3
then
YResult := YNorm
else
if YNorm<=5
then
YResult := 5
else
YResult := 10;
// Soll hier nun die selbst errechneten Werte für die Y-Achse ausgeben
for L := 1 to 10 do begin
sgUmsatz.cells[2,L] := (L * YDiv).tostring;
end;
// Nicht benötigt, oder?
YResult := YResult * YDiv;
end;
Eigentlich brauche ich doch nur den YDiv-Wert, oder?
Siehe neuer Screenshot und angepasstes Demo im Anhang.