16222

Динамическое создание объектов на базе стандартных классов DELPHI

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №11 Динамическое создание объектов на базе стандартных классов DELPHI Цель работы: Изучить принципы создания приложения без использования услуг инспектора объектов Постановка задачи: Разработать приложение реализующее вычисление определенного и...

Русский

2013-06-20

103 KB

7 чел.

Лабораторная работа №11

Динамическое создание объектов на базе стандартных классов DELPHI

Цель работы: Изучить принципы создания приложения без использования услуг инспектора объектов

Постановка задачи: Разработать приложение, реализующее вычисление определенного интеграла. Визуальные компоненты, предназначенные для задания исходных данных и вывода результатов, создавать на главной форме  динамически.

Краткие теоретические сведения:

Для динамического создания объектов используется конструктор соответствующего класса. Все свойства соответствующего объекта, устанавливаемые обычно в инспекторе свойств объекта, должны быть установлены явно вручную. При этом, если конкретный объект является контейнером для другого объекта, то встроенный объект, если он не создаётся внешним объектом, должен создаваться вручную с помощью конструктора.

Текст программы:

unit UDisplayForm;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Series, ExtCtrls, StdCtrls, TeEngine, TeeProcs, Chart, Buttons, UCalc;

const

 clMyWindow=$00BAEDEF;

type

 TEditData=record

   left, top, width, height: integer;

   text: string;

 end;

 type

 TLabelData=record

   left, top, width, height, fontSize: integer;

   text: string;

   fontStyle: TFontStyles;

 end;

type

 TForm1 = class(TForm)

   LabelStart: TLabel;

   Timer1: TTimer;

   Timer2: TTimer;

   procedure FormCreate(Sender: TObject);

   procedure SomeEditKeyPress(Sender: TObject; var Key: Char);

   procedure SpeedButton1Click(Sender: TObject);

   procedure SomeEditChange(Sender: TObject);

   procedure MethodSelectorClick(Sender: TObject);

   procedure CheckBox1Click(Sender: TObject);

   procedure FormShow(Sender: TObject);

   procedure FormClick(Sender: TObject);

   function f2(x: Extended): Extended;

   procedure FormDestroy(Sender: TObject);

   procedure Timer1Timer(Sender: TObject);

   procedure Timer2Timer(Sender: TObject);

   procedure FormClick2(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Edit4: TEdit;

   MethodSelector: TRadioGroup;

   CheckBox1: TCheckBox;

   SpeedButton1: TSpeedButton;

   

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Panel1: TPanel;

   FunctionFormula: TImage;

   Panel2: TPanel;

   SeriesPatterned: TAreaSeries;

   SeriesFunction: TLineSeries;

   DisplayChart: TChart;

 end;

var

 Form1: TForm1;

 e1, e2, e3: string;

 p1, p2, p3: integer;

 integ: TIntegral;

const

 dataEdit: array [1..4] of TEditData = ((left: 3; top: 278; width: 53; height: 19; text: '0'),

                                     (left: 98; top: 278; width: 53; height: 19; text: '1'),

                                     (left: 195; top: 278; width: 53; height: 19; text: '10'),

                                     (left: 20; top: 18; width: 338; height: 43; text: 'Some'));

 dataLabel: array[1..5] of TLabelData = ((left: 3; top: 264; width: 43; height: 13; fontSize: 8; text: 'Нижняя'; fontStyle: []),

                                           (left: 98; top: 264; width: 45; height: 13; fontSize: 8; text: 'Верхняя:'; fontStyle: []),

                                           (left: 195; top: 264; width: 29; height: 13; fontSize: 8; text: 'Шаги:'; fontStyle: []),

                                           (left: 3; top: 28; width: 100; height: 24; fontSize: 14; text: 'Интеграл:'; fontStyle: [fsBold]),

                                           (left: 0; top: 20; width: 19; height: 37; fontSize: 24; text: '='; fontStyle: []));

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

 ///

end;

//Edited

procedure TForm1.SomeEditKeyPress(Sender: TObject; var Key: Char);

begin

 if Sender=Edit3 then

 begin

   p3:=Edit3.SelStart;

   exit;

 end;

 if (Sender=Edit2) then

   p2:=Edit2.SelStart;

 if (Sender=Edit1) then

   p1:=Edit1.SelStart;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 Application.Terminate;

end;

procedure TForm1.SomeEditChange(Sender: TObject);

var r: real;

   s: string;

begin

 if Sender=Edit3 then

 begin

   try

     integ.N:=StrToInt((Sender as TEdit).Text);

     e3:=Edit3.Text;

   except

     on EConvertError do begin

                               Edit3.Text:=e3;

                               Edit3.SelStart:=p3;

                             end;

   end;

 end

 else if ((Sender=Edit1) or (Sender=Edit2)) then

 begin

   if true then

   begin

       try

         r:=StrToFloat((Sender as TEdit).Text);

         e1:=Edit1.Text;

         e2:=Edit2.Text;

       except

         on EConvertError do begin

                               if Sender=Edit1 then

                               begin

                                 (Sender as TEdit).Text:=e1;

                                 (Sender as TEdit).SelStart:=p1;

                               end

                               else if Sender=Edit2 then

                               begin

                                 (Sender as TEdit).Text:=e2;

                                 (Sender as TEdit).SelStart:=p2;

                               end;

                               exit;

                             end;

       end;

       if Sender=Edit2 then

       begin

         integ.B:=r;

         //Application.MessageBox(PChar(floattostr(integ.Res)),'');

         s:=FloatToStr(integ.B);

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth(s) div 2, 2, s)

       end

       else

       begin

         integ.A:=r;

         s:=FloatToStr(integ.A);

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth(s) div 2, 60, s);

       end;

   end

   else

   begin

       FunctionFormula.Canvas.Font.Size:=10;

       if Sender=Edit2 then

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth('') div 2, 2, '')

       else

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth('') div 2, 60, '');

   end;

 end;

 if integ.Res=0 then

   Edit4.Text:='Неверные данные!'

 else

   Edit4.Text:=FloatToStr(integ.Res);

end;

procedure TForm1.MethodSelectorClick(Sender: TObject);

begin

 integ.CalcMethod:=MethodSelector.ItemIndex;

 if integ.Res=0 then

   Edit4.Text:='Неверные данные!'

 else

   Edit4.Text:=FloatToStr(integ.Res);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

 SeriesPatterned.AreaLinesPen.Visible:=(Sender as TCheckBox).Checked;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

 //

end;

procedure TForm1.FormClick(Sender: TObject);

var b: TBitmap;

   ed: TEdit;

   l: TLabel;

   var i: integer;

begin

 Panel2:=TPanel.Create(Self);

 Panel2.Parent:=Self;

 Panel2.Left:=105;

 Panel2.Top:=0;

 Panel2.Width:=523;

 Panel2.Height:=83;

 Panel2.BevelOuter:=bvLowered;

 Panel2.BevelInner:=bvRaised;

 Panel1:=TPanel.Create(Self);

 Panel1.Parent:=Panel2;

 Panel1.Left:=160;

 Panel1.Top:=4;

 Panel1.Width:=358;

 Panel1.Height:=71;

 Panel1.Color:=clMyWindow;

 Panel1.BevelOuter:=bvNone;

 FunctionFormula:=TImage.Create(Self);

 FunctionFormula.Parent:=Panel2;

 FunctionFormula.Left:=4;

 FunctionFormula.Top:=4;

 for i:=1 to 4 do

 begin

   ed:=TEdit.Create(Self);

   ed.Parent:=Self;

   ed.Top:=dataEdit[i].top;

   ed.Left:=dataEdit[i].left;

   ed.Width:=dataEdit[i].width;

   ed.Height:=dataEdit[i].height;

   ed.Color:=clMyWindow;

   ed.Ctl3D:=false;

   ed.Text:=dataEdit[i].text;

   ed.OnChange:=SomeEditChange;

   case i of

     1: Edit1:=ed;

     2: Edit2:=ed;

     3: Edit3:=ed;

     4:begin

         ed.Parent:=Panel1;

         ed.Font.Size:=24;

         ed.BorderStyle:=bsNone;

         ed.OnChange:=nil;

         ed.ReadOnly:=true;

         Edit4:=ed;

       end;

   end;

 end;

 for i:=1 to 5 do

 begin

   l:=TLabel.Create(Self);

   l.Parent:=Self;

   l.Left:=dataLabel[i].left;

   l.Top:=dataLabel[i].top;

   l.Width:=dataLabel[i].width;

   l.Height:=dataLabel[i].height;

   l.Font.Size:=dataLabel[i].fontSize;

   l.Font.Style:=dataLabel[i].fontStyle;

   l.Caption:=dataLabel[i].text;

   case i of

   1: Label1:=l;

   2: Label2:=l;

   3: Label3:=l;

   4: Label4:=l;

   5:begin

       l.Parent:=Panel1;

       Label5:=l;

     end;

   end;

 end;

 MethodSelector:=TRadioGroup.Create(Self);

 MethodSelector.Parent:=Self;

 MethodSelector.Left:=3;

 MethodSelector.Top:=103;

 MethodSelector.Width:=257;

 MethodSelector.Height:=145;

 MethodSelector.Caption:='Метод вычислений: ';

 MethodSelector.Items.Add('Метод трапеций');

 MethodSelector.Items.Add('Метод левых прямоугольников');

 MethodSelector.Items.Add('Метод правых прямоугольников');

 MethodSelector.Items.Add('Метод средних прямоугольников');

 MethodSelector.ItemIndex:=0;

 MethodSelector.OnClick:=MethodSelectorClick;

 SpeedButton1:=TSpeedButton.Create(Self);

 SpeedButton1.Parent:=Self;

 SpeedButton1.Left:=5;

 SpeedButton1.Top:=310;

 SpeedButton1.Width:=241;

 SpeedButton1.Height:=31;

 SpeedButton1.Glyph.Canvas.CopyMode:=cmSrcCopy;

 SpeedButton1.Glyph.LoadFromResourceName(hInstance, 'EXIT');

 SpeedButton1.OnClick:=SpeedButton1Click;

 SpeedButton1.Flat:=true;

 

 SeriesPatterned:=TAreaSeries.Create(Self);

 //SeriesPatterned.ParentChart:=DisplayChart;

 SeriesPatterned.AreaBrush:=bsFDiagonal;

 SeriesPatterned.DrawArea:=true;

 SeriesPatterned.SeriesColor:=$00C8C8C8;

 SeriesPatterned.Title:='Вычисляемая площадь';

 SeriesPatterned.AreaLinesPen.Color:=$00E9E9E9;

 SeriesPatterned.AreaLinesPen.SmallDots:=true;

 SeriesPatterned.AreaLinesPen.Visible:=false;

 SeriesFunction:=TLineSeries.Create(Self);

 SeriesFunction.SeriesColor:=clBlack;

 SeriesFunction.LinePen.Width:=2;

 SeriesFunction.Title:='Функция';

 DisplayChart:=TChart.Create(Self);

 DisplayChart.Parent:=Self;

 DisplayChart.Left:=266;

 DisplayChart.Top:=88;

 DisplayChart.Width:=362;

 DisplayChart.Height:=258;

 DisplayChart.View3D:=false;

 DisplayChart.Legend.Alignment:=laBottom;

 DisplayChart.Legend.Color:=$00F0F0F0;

 DisplayChart.Legend.ColorWidth:=15;

 DisplayChart.Legend.ShadowColor:=clSilver;

 DisplayChart.Legend.ShadowSize:=1;

 DisplayChart.Title.Text.Clear;

 DisplayChart.Title.Text.Add('Графическое изображение');

 DisplayChart.Title.Font.Color:=clBlack;

 DisplayChart.Title.Font.Style:=[fsBold];

 DisplayChart.Title.Font.Size:=10;

 DisplayChart.Title.Font.Name:='Arial';

 DisplayChart.LeftAxis.AutomaticMinimum:=false;

 DisplayChart.LeftAxis.Minimum:=0;

 DisplayChart.Gradient.EndColor:=$0088DFE3;

 DisplayChart.Gradient.Visible:=true;

 DisplayChart.BackWall.Brush.Style:=bsClear;

 DisplayChart.MarginBottom:=8;

 DisplayChart.BevelOuter:=bvNone;

 DisplayChart.BorderStyle:=bsSingle;

 DisplayChart.AddSeries(SeriesPatterned);

 DisplayChart.AddSeries(SeriesFunction);

 CheckBox1:=TCheckBox.Create(Self);

 CheckBox1.Parent:=Self;

 CheckBox1.Left:=270;

 CheckBox1.Top:=327;

 CheckBox1.Width:=355;

 CheckBox1.Height:=17;

 CheckBox1.Color:=clWhite;

 CheckBox1.Caption:='Показать границы областей';

 CheckBox1.OnClick:=CheckBox1Click;

 b:=TBitmap.Create;

 b.LoadFromResourceName(hInstance, 'INTEGRAL');

 b.Transparent:=true;

 b.TransparentColor:=clWhite;

 FunctionFormula.Width:=b.Width;

 FunctionFormula.Height:=b.Height;

 FunctionFormula.Canvas.Brush.Color:=$00BAEDEF;

 FunctionFormula.Canvas.FillRect(Rect(0, 0, b.Width, b.Height));

 FunctionFormula.Canvas.StretchDraw(Rect(0, 0, b.Width-1, b.Height-1), b);

 b.Free;

 Panel1.Left:=FunctionFormula.Left+FunctionFormula.Width;

 Panel1.Height:=FunctionFormula.Height;

 Panel1.Top:=FunctionFormula.Top;

 integ:=TIntegral.Create;

 integ.Chart:=DisplayChart;

 SomeEditChange(Edit1);

 SomeEditChange(Edit2);

 Self.OnClick:=nil;

 LabelStart.Free;

 Timer2.Enabled:=true;

end;

function TForm1.f2(x: Extended): Extended;

begin

 Result:=x*x*3;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

 Label1.Free;

 Label2.Free;

 Label3.Free;

 Label4.Free;

 Label5.Free;

 Edit1.Free;

 Edit2.Free;

 Edit3.Free;

 Edit4.Free;

 MethodSelector.Free;

 CheckBox1.Free;

 SpeedButton1.Free;

 Panel1.Free;

 FunctionFormula.Free;

 Panel2.Free;

 SeriesPatterned.Free;

 SeriesFunction.Free;

 DisplayChart.Free;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 if Self.AlphaBlendValue<=10 then

 begin

   Timer1.Enabled:=false;

   FormClick(nil);

 end

 else  

   Self.AlphaBlendValue:=Self.AlphaBlendValue-8;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

 if Self.AlphaBlendValue=255 then

   Timer2.Enabled:=false

 else

   Self.AlphaBlendValue:=Self.AlphaBlendValue+8;

end;

procedure TForm1.FormClick2(Sender: TObject);

begin

 Timer1.Enabled:=true;

end;

end.

unit UCalc;

interface

uses Chart;

const funcCount=4;

type

    TValueChangedFunc=procedure (newValue: Extended);

    TF=function (x: Extended): Extended of object;

    TIntegral=class

     private

       FValueMin: Extended;//Нижняя граница

       FValueMax: Extended;//Верхняя граница

       FValueH: Extended; //Ширина шага

       FRes: Extended;    //Результат

       FValueN: Integer;  //Количество шагов

       FCalcMethod: Byte; //Номер выбранного способа подсчёта (0-трап.; 1-лев.прямоуг.; 2-прав.прямоуг.; 3-средн.прямоуг)

       FAutoRedraw: Boolean; //Перерисовывать при изменении хотя бы одного параметра

       FChart: TChart;

       FOnMinChanged: TValueChangedFunc;

       FOnMaxChanged: TValueChangedFunc;

       FOnNChanged: TValueChangedFunc;

       FOnHChanged: TValueChangedFunc;

       FF: TF;          //Функция подынтегральная

     protected

       procedure SetN(newN: integer); virtual;

       procedure SetH(newH: Extended); virtual;

       procedure SetMin(newMin: Extended); virtual;

       procedure SetMax(newMax: Extended); virtual;

       procedure SetCalcMethod(newMethod: byte); virtual;

       procedure SetChart(newChart: TChart); virtual;

       procedure SetF(newF: TF);

     public

       constructor Create();

       destructor Destroy; override;

       property A: Extended read FValueMin write SetMin;//Нижняя граница

       property B: Extended read FValueMax write SetMax;//Верхняя граница

       property N: integer read FValueN write SetN default 10;//Количество шагов

       property H: Extended read FValueH write SetH;//Ширина одного шага

       property CalcMethod: byte read FCalcMethod write SetCalcMethod default 0;   //Номер выбранного способа подсчёта (0-трап.; 1-лев.прямоуг.; 2-прав.прямоуг.; 3-средн.прямоуг)

       property Chart: TChart read FChart write SetChart;

       property AutoRedraw: boolean read FAutoRedraw write FAutoRedraw default true;//Перерисовывать при изменении хотя бы одного параметра

       property Res: Extended read FRes;

       //События (на изменение каждого из параметров)

       property OnMinChanged: TValueChangedFunc read FOnMinChanged write FOnMinChanged default nil;

       property OnMaxChanged: TValueChangedFunc read FOnMaxChanged write FOnMaxChanged default nil;

       property OnNChanged: TValueChangedFunc read FOnNChanged write FOnNChanged default nil;

       property OnHChanged: TValueChangedFunc read FOnHChanged write FOnHChanged default nil;

       //Подынтегральная функция

       function fDefault(x: Extended): Extended; virtual;

       //

       property f: TF read FF write SetF;

       //Функции подсчёта результата

       procedure ReCalc(); virtual;

       function calc_trapezium: Extended; virtual;

       function calc_rectangle_left: Extended; virtual;

       function calc_rectangle_right: Extended; virtual;

       function calc_rectangle_media: Extended; virtual;

       //Функции вывода информации в компонент TChart

       procedure Redraw(); virtual;

       procedure draw_f; virtual;

       procedure draw_trapezium; virtual;

       procedure draw_rectangle_left; virtual;

       procedure draw_rectangle_right; virtual;

       procedure draw_rectangle_media; virtual;

    end;

implementation

constructor TIntegral.Create();

begin

 inherited Create();

 FValueMax:=1;

 FValueMin:=0;

 FValueH:=0.1;

 FAutoRedraw:=true;

 FF:=fDefault;

 N:=10;

end;

destructor TIntegral.Destroy;

begin

 inherited Destroy;

end;

procedure TIntegral.SetN(newN: integer);

begin

 FValueN:=newN;

 if FValueN<1 then

   FValueN:=1;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnNChanged) then

   FOnNChanged(FValueN);

 if Assigned(FOnHChanged) then

   FOnHChanged(FValueH);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetH(newH: Extended);

begin

 FValueN:=round((FValueMax-FValueMin)/newH)+1;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnNChanged) then

   FOnNChanged(FValueN);

 if Assigned(FOnHChanged) then

   FOnHChanged(FValueH);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetMin(newMin: Extended);

begin

 FValueMin:=newMin;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnMinChanged) then

   FOnMinChanged(newMin);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetMax(newMax: Extended);

begin

 FValueMax:=newMax;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnMaxChanged) then

   FOnMaxChanged(newMax);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetChart(newChart: TChart);

begin

 FChart:=newChart;

 if (AutoRedraw) then

   Redraw();

end;

procedure TIntegral.SetCalcMethod(newMethod: byte);

begin

 if (newMethod in [0..3]) then

 begin

   FCalcMethod:=newMethod;

   if (AutoRedraw) then

     Redraw();

   ReCalc();

 end;

end;

procedure TIntegral.SetF(newF: TF);

begin

 if (@newF<>nil) then

 begin

   FF:=newF;

   ReCalc;

   Redraw;

 end;

end;

procedure TIntegral.ReCalc;

begin

   FRes:=0;

   if FValueMin<FValueMax then

   begin

     case FCalcMethod of

     0: FRes:=calc_trapezium();

     1: FRes:=calc_rectangle_left();

     2: FRes:=calc_rectangle_right();

     3: FRes:=calc_rectangle_media();

     end;

   end;

end;

function TIntegral.calc_trapezium: Extended;

var x: extended;

   i: integer;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to FValueN do

 begin

   Result:=Result+(f(x)+f(x+FValueH))/2*FValueH;

   x:=x+FValueH;

 end;

end;

function TIntegral.calc_rectangle_left:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x);

     x:=x+FValueH;

   end;

end;

function TIntegral.calc_rectangle_right:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x+FValueH);

     x:=x+FValueH;

   end;

end;

function TIntegral.calc_rectangle_media:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x+FValueH/2);

     x:=x+FValueH;

   end;

end;

procedure TIntegral.Redraw;

begin

 if (Assigned(FChart) and (FValueMin<FValueMax)) then

 begin

   draw_f;

   case FCalcMethod of

   0: draw_trapezium();

   1: draw_rectangle_left();

   2: draw_rectangle_right();

   3: draw_rectangle_media();

   end;

 end

 else if Assigned(FChart) then

 begin

   Chart.Series[0].Clear;

   Chart.Series[1].Clear;

   Chart.LeftAxis.Maximum:=0;

 end;

end;

procedure TIntegral.draw_f;

var rightRange, x, h1: extended;

begin

 if Assigned(FChart) then

 begin

   FChart.Series[1].Clear;

   rightRange:=FValueMax+(FValueMax-FValueMin)*0.1;

   x:=FValueMin-(FValueMax-FValueMin)*0.1;

   h1:=(rightRange-x)/50;

   rightRange:=rightRange+h1;

   while x<=rightRange do

   begin

     FChart.Series[1].AddXY(x, f(x));

     x:=x+h1;

   end;

   Chart.LeftAxis.Maximum:=f(x)*1.05;

 end;

end;

procedure TIntegral.draw_trapezium;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=0 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_left;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x));

     FChart.Series[0].AddXY(x+FValueH, f(x));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_right;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x+FValueH));

     FChart.Series[0].AddXY(x+FValueH, f(x+FValueH));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_media;

var x: extended;

   i: integer;

begin

 if Assigned(Chart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     Chart.Series[0].AddXY(x, f(x+FValueH/2));

     Chart.Series[0].AddXY(x+FValueH, f(x+FValueH/2));

     x:=x+FValueH;

   end;

 end;

end;

function TIntegral.fDefault(x: extended): extended;

begin

 Result:=Exp(sqr(x));

end;

end.

Результаты работы программы:

 

 

 

Выводы: таким образом, мы изучили способы динамического создания компонентов и встраивания их друг в друга.


 

А также другие работы, которые могут Вас заинтересовать

39165. Анализ конкурентоспособность в процессе жизненного цикла предприятия 312 KB
  Эта концепция используется для создания и сбыта продукции разработки стратегии маркетинга с момента поступления товара на рынок до его снятия с рынка. Это анализ возможностей производства продукции. Выбранная тема актуальна для данного дипломного проектирования потому что необходимо анализировать конкурентоспособность на каждом этапе жизненного цикла товара для организации эффективного сбыта продукции пользующейся спросом на рынке. Это анализ возможностей производства продукции.
39166. Исследование коронного разряда в плотном газе 90.7 KB
  Коронный разряд является самостоятельным разрядом в сравнительно плотном газе. Если к двум электродам между которыми находится газовый промежуток приложить электрическое поле то при определенной разности потенциалов между электродами которую назовем критической и обозначим через...
39168. Фактори, чинники та критерії конкурентоспроможності товару 109.5 KB
  Найчастіше під конкурентоспроможністю товару мають на увазі: властивість сукупність властивостей товару та його сервісу яка характеризується ступенем реального або потенційного задоволення ним конкретної потреби порівняно з аналогічними товарами представленими на цьому ринку; характеристику товару що відображає його відмінність від товаруконкурента за ступенем відповідності конкретній суспільній потребі та за витратами на її задоволення; спроможність товару відповідати вимогам даного ринку у період що аналізується; здатність...
39169. Конституционное право зарубежных стран 4.56 MB
  В учебнике освещаются основные понятия и институты зарубежного конституционного права раскрываются его предмет система источники. Предмет источники и система конституционного права зарубежных стран. Предмет конституционного права зарубежных стран. Источники конституционного права зарубежных стран.
39170. Базова апаратна конфігурація 68.75 KB
  Персональний компютер - універсальна технічна система. Його конфігурацію (склад устаткування) можна гнучко змінювати в міру необхідності. Тим не менш, існує поняття базової конфігурації, яку вважають типовою. У такому комплекті комп'ютер зазвичай поставляється. Поняття базової конфігурації може змінюватися. В даний час в базовій конфігурації розглядають чотири пристрої
39171. Основные положения по нормоконтролю и предварительной защите дипломных работ 729 KB
  Общие требования кафедры к содержанию и структуре дипломной работы 10 4.Общие требования кафедры к оформлению дипломной работы 11 5.Образцы оформления и требования к оформлению отдельных фрагментов дипломной работы: 13 титульный лист образец 1 14 реферат...
39172. ДЕРЖАВНЕ ПРАВО ЗАРУБІЖНИХ КРАЇН 3.29 MB
  Тимченко ДЕРЖАВНЕ ПРАВО ЗАРУБІЖНИХ КРАЇН Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів КИЇВ2005 вищих навчальних закладів УДК342187075. Б 86 Державне право зарубіжних країн: Навчальний посібник. 504 с ISBN 9663640545 Навчальний посібник являє собою комплекс навчальнометодичних матеріалів до курсу Державне конституційне право зарубіжних країн який є обов'язковим для викладання у вищих юридичних закладах IIIIV рівня акредитації. 2005 Центр навчальної літератури 2005...
39173. Аудит финансовых результатов предприятий торговли ООО «Рассвет» 513.5 KB
  Прибыль конечный финансовый результат слагается из финансового результата от реализации продукции работ услуг основных средств и иного имущества предприятия и доходов от прочих операций уменьшенных на сумму расходов по этим операциям. Они более полно чем прибыль отражают окончательные результаты хозяйствования потому что их величина показывает соотношение эффекта с наличными или использованными ресурсами. В результатах деятельности предприятия заинтересованы учредители предприятия которые получают дивиденды инвесторы...