Основы объектно-ориентированного программирования: Методические указания к выполнению лабораторной работы по дисциплине «Информатика», страница 8

 DHeight:=SHeight-SHeight/k;

end;


procedure Tcil.Deform;

begin

 inherited;

 DOsnov:=2*sqrt(SHeight*sqr(SOsnov*0.5)/DHeight);

end;

procedure TZagot.Draw;

begin

 with Form1.Image1.Canvas do Fillrect(ClipRect);

 m:=SHeight;

 if SOsnov>m then m:=SOsnov;

 if DHeight>m then m:=DHeight;

 if DOsnov>m then m:=DOsnov;

 m:=250/m;

 Show(m*DHeight,m*DOsnov,clRed);

 Show(m*SHeight,m*SOsnov,clBlack);

end;

procedure TCil.Show(Heig: Real; Osn: Real; Zc: TColor);

begin

 with form1.image1.canvas do

  begin

   Pen.color:=zc;

   Ellipse(160-Round(Osn*0.5),10+Round(m*SHeight-Heig), 160+Round(Osn*0.5),10+Round(m*SHeight-Heig+Osn*0.3));

Arc(160-Round(Osn*0.5),10+Round(m*SHeight),160+Round(Osn*0.5),  10+Round(m*SHeight+Osn*0.3),160-Round(Osn*0.5), 10+Round(m*SHeight+Osn*0.15),160+Round(Osn*0.5), 10+Round(m*SHeight+Osn*0.15));

   MoveTo(160-Round(Osn*0.5),10+Round(m*SHeight-Heig+Osn*0.15));

   LineTo(160-Round(Osn*0.5),10+Round(m*SHeight+Osn*0.15));

   MoveTo(160+Round(Osn*0.5),10+Round(m*SHeight-Heig+Osn*0.15));

   LineTo(160+Round(Osn*0.5),10+Round(m*SHeight+Osn*0.15));

  end;

end;

Вышеописанные процедуры были закодированы для работы с цилиндрической заготовкой. Аналогичным образом кодируются процедуры для работы с четырехугольной заготовкой. Один из вариантов такого рода процедур помещен ниже.

procedure TPar.Deform;

begin

 inherited;

 DOsnov:=sqrt(SHeight*sqr(SOsnov)/DHeight);

end;

procedure TPar.Show(Heig: Real; Osn: Real; Zc: TColor);

begin

  with form1.image1.canvas do

   begin

     Pen.Color:=zc;

    Polygon([point(220-Round(Osn*0.5),10+Round(m*SHeight-Heig)), Point(220+Round(Osn*0.5),10+Round(m*SHeight-Heig)), Point(220+Round(Osn*0.2),10+Round(m*SHeight-Heig+Osn*0.3)),           Point(220-Round(Osn*0.8),10+Round(m*SHeight-Heig+Osn*0.3))]);

     MoveTo(220-Round(Osn*0.8),10+Round(m*SHeight-Heig+Osn*0.3));

     LineTo(220-Round(Osn*0.8),10+Round(m*SHeight+Osn*0.3));

     LineTo(220+Round(Osn*0.2),10+Round(m*SHeight+Osn*0.3));

     LineTo(220+Round(Osn*0.5),10+Round(m*SHeight));

     LineTo(220+Round(Osn*0.5),10+Round(m*SHeight-Heig));

     MoveTo(220+Round(Osn*0.2),10+Round(m*SHeight-Heig+Osn*0.3));

     LineTo(220+Round(Osn*0.2),10+Round(m*SHeight+Osn*0.3));

end;

end;

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

procedure TForm1.FormActivate(Sender: TObject);

begin

|

end;

В то место, где находится текстовый курсор, вставляем строку:

Form1.Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);

3.3.  Создание интерфейсной части программы

Создание интерфейсной части программы в DELPHI сводится к размещению на оконной форме необходимых компонентов, таких как: однострочные редакторы, переключатель, кнопки, метки, всплывающий список и т.п., и изменению свойств этих компонентов.

В окне дизайнера форм создадим интерфейс будущей программы, внешний вид которой приведен на рисунке 3. Для этого разместим необходимые компоненты, таким образом, как показано на рисунке. Имена некоторых компонентов, к которым в дальнейшем будем обращаться из программы, рекомендуем изменить на более удобные названия. На рисунке новые имена приведены в круглых скобках, которые должны быть прописаны в поле Name в окне инспектора объектов.

Рисунок 3 – Вид окна формы приложения

3.4.  Обработка событий

Напишите обработчик нажатия на кнопку «Выход» самостоятельно. Для кнопки «Расчет» обработчик будет выглядеть следующим образом: