Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тестування створеної компоненти

Поиск

Для тестування нової компоненти і її властивостей, потрібно створити новий проект і помістити на форму дану компоненту.

Щоб перевірити властивість обрахунку натиснень ClickCount, в обробнику натиснення нової кнопки потрібно написати процедуру виведення кількості натиснень у підказку (властивість Hint).

Питання для самоконтролю:

  1. Які дії потрібно виконати для того, щоб створити модуль компоненти?
  2. Яким чином можна встановити компонент?
  3. Як здійснити тестування нової компоненти?

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

Тема: Робота з графікою у Delphi.

Мета роботи: вивчити можливості побудови графіків за допомогою компоненту відображення графічної інформації. Написати і налагодити програму побудови на екрані графіка заданої функції.

Розробка проекту «Побудова графіка функції»

Завдання. Створити програму, результатом роботи якої буде по­будова на екрані графіка функції f(x) = 2sin x·е5 на інтервалі [0; 25].

Аналіз проекту. Для побудови графіків функцій використовується властивість Pixels об'єкта Canvas. Наприклад оператор Forma1.Canvas.Pixels[10,10]:=clRed; виводить на канву точку з координатами (10,10) червоного кольору.

Розмір графічної площини форми визначається значеннями властиво­стей ClientWiclth та ClientHeight. Лівій верхній точці робочої області відповідає елемент Pixels[0,0], а правій нижній – Pixels[ClientWidth-1, ClientHeight-1].

Розглянемо порядок побудови графіка на канві форми.

Як правило, графік будується на основі формули. Межі діапазону зміни аргументу функції є вхідним даними. Діапазон зміни значень функції можна обчислити. Виходячи з цих даних, можна визначити масштаб, що дасть змогу побудувати графік таким чином, щоб він займав усю область форми. Наприклад, якщо деяка функція f(х) може набувати значення від 0 до 1000 і для виведення її графіка використовується область заввишки 250 пікселів, то масштаб вісі Оу обчислюється за формулою: m=250/1000. Отже, значенню f(х)=1000 відповідатиме точка області з координатою у=0, оскільки y=250-f(x)·m= 250 -1000·(250/1000). Значенню f(х)=70 відповідатиме точка з координатою y=233, то у=250–70·(250/1000) (тут значення заокруглене через те, що координата може бути тільки цілим числом).

ХІД РОБОТИ

Алгоритм розробки проекту

1. Створити папку С:\Delphi\lab_11.

2. Створити новий проект.

3. У програмному модулі в розділі Implementation (розділ опису про­цедур і функцій модуля) після директиви {$R *.dfm} створити процедуру GrOfFunc – побудова графіка функції. В цій процедурі спочатку обчислюється максимальне (у2) та мінімальне (у1) значення функції на відрізку [х1;х2], а потім, враховуючи значення висоти та ширини області виведення графіка, обчислюється масштаб для осей Ox (mx) та Оу (mу):

procedure groffunc;

var x,y, {аргумент та значення функції}

x1,y1,{[х1; х2] – відрізок, на якому будується функція}

x2,y2,{[у1; у2 ] – інтервал значень функції}

dx,{приріст функції}

mx,my: real; {масштаб}

l,b,{лівий нижній кут області виведення графіка}

h,w,{висота та ширина області виведення графіка}

x0,y0: integer; {точка початку координат}

function f(x:real):real;

Begin

f:=2*sin(x)*exp(x/5);

end;

Begin

l:=10;

b:=form1.ClientHeight-20;

h:=Form1.ClientHeight-40;

w:=Form1.ClientWidth-40;

x1:=0; x2:=25;

dx:=0.001;

y1:=f(x1); y2:=f(x2);

x:=x1;

Repeat

y:=f(x);

if y<y1 then y1:=y;

if y>y2 then y2:=y;

x:=x+dx;

until (x>=x2);

my:=h/abs(y2-y1); mx:=w/abs(x2-x1);{масштаби по координатних вісях};

x0:=l;

y0:=b-abs(round(y1*my));

with Form1.Canvas do

Begin

moveto(l,b); lineto(l,b-h-13);

moveto(x0,y0); lineto(x0+w,y0);

textout (l+5,b-h,floattostrf(y2,ffgeneral,6,3));

textout (l+5,b,floattostrf(y1,ffgeneral,6,3));

x:=x1;

Repeat

y:=f(x);

Form1.Canvas.Pixels[x0+round(x*mx),y0-round(y*my)]:=clblack;

x:=x+dx;

until (x>=x2);

end;

end;

4. Для виклику процедури GrOfFunc створити процедуру обробки події OnPaint для об'єкта Forml. Ця процедура забезпечить накреслен­ня графіка після відкриття форми в результаті запуску програми.

5. Для накреслення графіка після зміни розмірів форми створити про­цедуру обробки цієї події OnCanResize для об'єкта Forml. У цій про­цедурі виконати очистку поля форми, а потім викликати процедуру GrOfFunc для побудови графіка відповідно до нових розмірів форми:

with Forml do Canvas.FillRect(Rect(0,0, ClientWidth, clientHeight));

GrOfFunc;


Лістинг програми:

unit Unitl;

Interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, Dialogs;

Type

Private

Public

end;

var Forml: TForml;

implementation {$R *.dfm}

procedure GrOfFunc;

{тут розміщається текст процедури GrOfFunc – див. вище}

end;

procedure TForml.FormPaint(Sender: TObject);

Begin

GrOfFunc; {виклик процедури GrOfFunc }

end;

procedure TForml.FormCanResize(Sender: TObject; var NewWidth,NewHeight: Integer; var Resize: Boolean);

Begin

{поновлення побудови на формі нового розміру}

with forml do Canvas.FillRect(rect 0,0,ClientWidth,clientHeight));

GrOfFunc;

end;

end.

 

Питання для самоконтролю:

1. Яка властивість Delphi відповідає поверхні обєкту для того, щоб вивести на поверхню графічний елемент?

2. Які є методи властивості Canvas?

3. Який метод властивості Canvas використовується для малювання точок ліній, контурів геометричних фігур тощо?

4. Яка властивість методу Pen задає режим відображення?

5. Яка властивість методу Pen задає товщину лінії?

6. Яка властивість методу Brush задає стиль заповнення замкненої області?

7. Який використовується метод для виведення тексту на поверхню графічного об'єкту?

8. Який метод використовується для малювання лінії?

9. Який метод малює ламану лінію?

10. Яка властивість містить інформацію про колір кожної точки графічної поверхні?

 


Лабораторна робота №12

Тема: Створення програми з використанням мультимедіа.

Мета роботи: вивчити можливості мультимедіа в Delphi. Написати і налагодити програму побудови на екрані.



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 314; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.254.103 (0.006 с.)