напиши основную программу в делфи для вызова этой компоненты, которая вычисляет график по аргументам и функциям из файлаunit GraphicControl1;

interface

uses
  SysUtils, Windows, Messages, Classes, Controls, Graphics, Types, Math;

type
  MyGraphic = class(TGraphicControl)
  private
    FPen: TPen;
    FBrush: TBrush;
    Fx1, Fy1, Fx2, Fy2: integer;
    function Convert_x(x: integer): Integer;
    function Convert_y(y: integer): Integer;
    function F(x: integer): integer;
    procedure Setx1(temp: integer);
    procedure Setx2(temp: integer);
    procedure Sety1(temp: integer);
    procedure Sety2(temp: integer);
    procedure SetBrush(temp: TBrush);
    procedure SetPen(temp: TPen);
  protected
    procedure StyleChanged(Sender: TObject); dynamic;
    procedure Paint; override;
  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
    procedure LoadFromFile(FileName: String);
  published
    property Align;
    property Anchors;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Constraints;
    property ParentShowHint;
    property ShowHint;
    property Visible;

    property Pen: TPen read FPen write SetPen;
    property Brush: TBrush read FBrush write SetBrush;
    property x1: integer read Fx1 write Setx1;
    property x2: integer read Fx2 write Setx2;
    property y1: integer read Fy1 write Sety1;
    property y2: integer read Fy2 write Sety2;

    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;
  end;

procedure Register;

implementation

constructor MyGraphic.Create(Owner: TComponent);
begin
  inherited Create(Owner);
  ControlStyle := ControlStyle + [csReplicatable];
  Fx1 := 0;
  Fx2 := 0;
  Fy1 := 0;
  Fy2 := 0;
  Left := 10;
  Top := 10;
  Width := 300;
  Height := 200;
  FPen := TPen.Create;
  FPen.OnChange := StyleChanged;
  FBrush := TBrush.Create;
  FBrush.OnChange := StyleChanged;
end;

procedure MyGraphic.LoadFromFile(FileName: String);
var
  values: TStringList;
begin
  values := TStringList.Create;
  try
    values.LoadFromFile(FileName);
    if values.Count > 3 then
    begin
      Fx1 := StrToint(values.Strings[0]);
      Fy1 := StrToint(values.Strings[1]);
      Fx2 := StrToint(values.Strings[2]);
      Fy2 := StrToint(values.Strings[3]);
    end;
  finally
    values.Free;
  end;
end;

procedure MyGraphic.Setx1(temp: integer);
begin
  if Fx1 <> temp then
  begin
    Fx1 := temp;
    Paint;
  end;
end;

procedure MyGraphic.Sety1(temp: integer);
begin
  if Fy1 <> temp then
  begin
    Fy1 := temp;
    Paint;
  end;
end;

procedure MyGraphic.Setx2(temp: integer);
begin
  if Fx2 <> temp then
  begin
    Fx2 := temp;
    Paint;
  end;
end;

procedure MyGraphic.Sety2(temp: integer);
begin
  if Fy2 <> temp then
  begin
    Fy2 := temp;
    Paint;
  end;
end;

procedure MyGraphic.StyleChanged(Sender: TObject);
begin
  Paint;
end;

procedure MyGraphic.SetBrush(temp: TBrush);
begin
  if FBrush <> temp then
  begin
    FBrush := temp;
    Paint;
  end;
end;

procedure MyGraphic.SetPen(temp: TPen);
begin
  if FPen <> temp then
  begin
    FPen := temp;
    Paint;
  end;
end;

function MyGraphic.Convert_x(x: integer): Integer;
begin
  if (Fx2 - Fx1) <> 0 then
  Result := Round((x - Fx1) * Width / (Fx2 - Fx1))
  else
  result:=0;
end;

function MyGraphic.Convert_y(y: integer): Integer;
begin
   if (Fy2 - Fy1) <> 0 then
    Result := Height - Round((y - Fy1) * Height / (Fy2 - Fy1))
  else
    Result := 0;
end;

function MyGraphic.F(x: integer): integer;
begin
  Result := Sqr(x);
end;

destructor MyGraphic.Destroy;
begin
  FPen.Free;
  FBrush.Free;
  inherited Destroy;
end;

procedure MyGraphic.Paint;
const
  n = 60;
var
  i: Integer;
  h, x: integer;
begin
  h := round((x2 - x1) / n);
  with Canvas do
  begin
    Rectangle(0, 0, Width, Height);
    MoveTo(Convert_x(x1), Convert_y(0));
    LineTo(Convert_x(x2), Convert_y(0));
    MoveTo(Convert_x(0), Convert_y(y1));
    LineTo(Convert_x(0), Convert_y(y2));
    x := x1;
    MoveTo(Convert_x(x), Convert_y(F(x)));
    for i := 1 to n do
    begin
      x := x + h;
      LineTo(Convert_x(x), Convert_y(F(x)));
    end;
  end;
end;

procedure Register;
begin
  RegisterComponents('Samples', [MyGraphic]);
end;

end.