Показать сообщение отдельно
  #2  
Старый 04.01.2010, 15:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В принципе, можно, конечно, отрисовывать все в 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. Что бы каждый раз график не рассчитывался и не перерисовывался.
Ответить с цитированием