Так навскидку не скажешь, создай временные переменные и в отладчике посмотри их значения:
Код:
for I :=0 to 10 do
begin
a1[i] := Amax / 10 * I;
III := YC-round(a1[i] * ly;
form1.Image1.Canvas.moveTo(Xc-2, III));
form1.Image1.Canvas.LineTo(Xc+2, III);
str(a1[i]:2:3,sd1);
form1.Image1.Canvas.TextOut(400, YC-round(a1[i] * ly), sd1);
end;
тогда хоть увидишь какое значение принимает переменная III и не выходит ли она за пределы Image1.
P.S. И форматируй код, невозможно в таком бардаке что-либо увидеть.