В принципе, можно, конечно, отрисовывать все в OnPaint. При этом незабудь преобразовать координаты по y, т.к. точка 0 по этой оси находится в другом месте.
Код:
function F(x : integer) : Integer;
begin
result := x*x;
end;
procedure TForm1.PaintBox1Paint(Sender : TObject);
var
x, y, i : Integer;
begin
// X in -100..100
// Y = X^2
x := -100 + Round(PaintBox1.Width / 2);
y := f(-100) * -1 + Round(PaintBox1.Height / 2);
With PaintBox.Canvas Do
Begin
Pen.Color := clBlack;
Brush.Color := clWhite;
FillRect(Rect(0,0,Width,Height);
MoveTo(x,y);
For I := -100 To 100 Do
Begin
x := -100 + Round(PaintBox1.Width / 2);
y := f(-100) * -1 + Round(PaintBox1.Height / 2);
LineTo(x,y);
End;
End;
end;
Но, вообще, лучше сделать отрисовку на буферном битмапе, а его уже выводить в OnPanit. Что бы каждый раз график не рассчитывался и не перерисовывался.