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.

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

 

 

 

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


 

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

32536. ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ ПРОГРАММНЫХ СРЕДСТВ 106.5 KB
  Разработка и использование ЭС образовательного назначения ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ ЭС. ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ ПРОГРАММНЫХ СРЕДСТВ Специфика разработки программных средств. Разработка программных средств имеет ряд специфических особенностей Прежде всего следует отметить некоторое противостояние: неформальный характер требований к ПС постановки задачи и понятия ошибки в нем но формализованный основной объект разработки  программы ПС. Этот творческий характер разработки ПС сохраняется до самого ее конца.
32537. ДИАЛОГ УЧАЩИХСЯ С ЭВМ. ОБЩЕПСИХОЛОГИЧЕСКИЕ ПРИНЦИПЫ ПОСТРОЕНИЯ ДИАЛОГА. ОРГАНИЗАЦИЯ ПРОЦЕССА ОБЩЕНИЯ 74.5 KB
  Разработка и использование ЭС образовательного назначения ДИАЛОГ УЧАЩИХСЯ С ЭВМ. Система должна оказывать поддержку попыткам обучаемых научиться общению с системой и не вызывать раздражения у учащихся принуждая их вести диалог если они этого не хотят. Широкое использование фактического диалога может отрицательно сказаться на отношении учащихся к. Не допускайте отрицательных оценок мышления памяти внимания учащихся.
32538. РАЗРАБОТКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА 129.5 KB
  Окна подразделяются на первичные и вторичные. Прочие порождаемые им окна относятся ко вторичным которые в свою очередь могут быть дочерними и всплывающими. Внережимные и дочерние окна служат для организации параллельных ветвей диалога. Пользователь может выбирать активное окно переключаясь между дочерними и внережимными или первичным и внережимными окнами если дочерние окна отсутствуют.
32539. ВЫБОР ФОРМ ПРЕДСТАВЛЕНИЯ ИНФОРМАЦИИ 470 KB
  ВЫБОР ФОРМ ПРЕДСТАВЛЕНИЯ ИНФОРМАЦИИ В ЭС применяются разнообразные формы представления информации: текст и гипертекст графика и гиперграфика видео анимация звук интерактивные трехмерные изображения. По способу формирования изображения они подразделяются на матричные растровые векторные и функциональные. Пиксель является минимальным адресуемым элементом матричного изображения. При любом увеличении качество векторного изображения не меняется.
32540. ОПРЕДЕЛЕНИЕ ТИПОВ УЧЕБНО-ТРЕНИРОВОЧНЫХ ЗАДАЧ 398 KB
  Типизация учебнотренировочных задач Напомним что основным средством контроля знаний в ЭС служат УТЗ результаты и ход выполнения которых оцениваются автоматически. Целесообразно чтобы программа включала в себя единое множество УТЗ из которого выбирались задачи используемые в том или ином контрольном блоке в зависимости от представления в нем содержания курса и требований к знаниям обучаемых. Необходимо чтобы уровень тематического деления множества УТЗ соответствовал минимальному охвату учебного материала блоком контроля. Таким образом...
32541. РАЗРАБОТКА СИСТЕМЫ КОНТРОЛЯ ЗНАНИЙ 130 KB
  Основная функция обратной связи идущей от учащегося к обучаемому раскрыть как осуществляется учебная деятельность с тем чтобы наметить систему обучающих воздействий которые обеспечивают эффективное достижение учебных целей. Информация которая идет по каналу обратной связи от обучаемого к обучающему содержит сведения о том как учащийся решает предложенные ему учебные задачи какие трудности испытывает их причины а также какие вспомогательные обучающие воздействия обеспечивают правильное решение учебных задач. В настоящее время...
32542. КАЧЕСТВО ПРОГРАММНОГО СРЕДСТВА 68.5 KB
  Понятие качества программного средства. Этому препятствует тот факт что повышение качества ЭС по одному из таких свойств часто может быть достигнуто лишь ценой изменения стоимости сроков завершения разработки и снижения качества этого ЭС по другим его свойствам. Поэтому при описании качества ЭС прежде всего должны быть фиксированы критерии отбора требуемых свойств ЭС. В настоящее время критериями качества программных средств criteri of softwre qulity принято считать: Функциональность  это способность ЭС выполнять набор...
32543. ОЦЕНКА УЧЕБНЫХ ПРОГРАММ 79.5 KB
  При оценивании следует помнить что не всякая оценка в равной мере применима ко всем программам необходимо учитывать тему цель и тип программы. Один из пунктов предназначен для краткого описания программы причем не столько ее содержания сколько других факторов которые могут вызвать интерес учителя предмет ступень обучения класс необходимое аппаратное обеспечение количество программ цена и т. Прогон программы запуск ввод данных управление. гарантируется ли работа при неправильном нажатии клавиш Точно ли указывается опасность...
32544. ИНДИВИДУАЛИЗАЦИЯ ОБУЧЕНИЯ. ОБЩИЕ ТРЕБОВАНИЯ К ОБУЧАЮЩЕЙ ПРОГРАММЕ. ЗАЩИТА ПРОГРАММНЫХ ПРОДУКТОВ 148.5 KB
  При запуске продукта проверяется наличие на ключевом носителе дискете или CDROM определенной информации записанной в защищенной от копирования области. Затраты обусловленные отсутствием защиты: недополученный доход изза несанкционированного распространения и использования продукта = Затраты обусловленные реализацией защиты: прямые затраты на реализацию или приобретение и интеграцию в продукт соответствующих средств; ограничения на программнотехническую совместимость накладываемые средствами защиты; снижение привлекательности...