
- •Палітра Компонентів Delphi
- •Редактор Коду Delphi
- •Конструктор Форм
- •Інспектор Об’єктів. Принцип візуальної розробки програм
- •Завершення роботи з проектом та створення нового проекту
- •Збереження проекту
- •Відкриття існуючого проекту
- •Робота з Delphi-програмою Структура Delphi-програм
- •Виконання Delphi-програми
- •Завершення виконання Delphi-програми
- •Лабораторна робота №1
- •Завдання
- •Теоретичні відомості
- •Лабораторна робота №2
- •Розробка проекту «Діалог»
- •Мал. Діалог Аналіз проекту
- •Хід роботи
- •Завдання для самостійного виконання
- •Лабораторна робота №3
- •Завдання
- •Теоретичні відомості
- •Лабораторна робота №4
- •Розробка проекту «Ваша вага»
- •Хід роботи
- •Розробка проекту «Обмін валюти»
- •Хід роботи
- •Лабораторна робота №5
- •Завдання
- •Хід роботи
- •Теоретичні відомості Оператори if і case мови Паскаль
- •Кнопки-перемикачі в Delphi|
- •Лабораторна робота №6
- •Завдання
- •Хід роботи
- •Теоретичні відомості Типи даних для роботи з|із| рядками Короткі рядки типу|типа| ShortString| і String|[n]
- •Довгий рядок типу|типа| String|
- •Компонент tComboBox|
- •Компонент tBitBtn|
- •Обробка подій
- •Лабораторна робота №7
- •Розробка проекту «Гороскоп»
- •Хід роботи
- •Розробка проекту «Фізичний конвектор»
- •Хід роботи
- •Лабораторна робота №8
- •Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Хід роботи
- •Лабораторна робота №9
- •Розробка проекту «Журнал олімпіади»
- •Хід роботи
- •Лабораторна робота №10
- •Завдання
- •Хід роботи
- •2. Установка
- •3. Тестування створеної компоненти
- •Лабораторна робота №11
- •Розробка проекту «Побудова графіка функції»
- •Хід роботи
- •Лабораторна робота №12
- •Розробка проекту «Графічний конструктор»
- •Хід роботи
- •Лабораторна робота №13
- •Розробка проекту «Чат для локальної та глобальної мережі»
- •Хід роботи
- •Розробка форми на настройок
- •Розробка програмного коду
- •Лабораторна робота №14.
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Етапи створення баз даних в Delphi.
- •Компонент тТаblе
- •Модуль даних
- •Лабораторна робота №15
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №16
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №17
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Лабораторна робота №18
- •Завдання
- •Хід роботи
- •Теоретичні відомості
- •Список літератури
Розробка проекту «Побудова графіка функції»
Завдання. Створити програму, результатом роботи якої буде побудова на екрані графіка функції 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) (тут значення заокруглене через те, що координата може бути тільки цілим числом).
Хід роботи
Алгоритм розробки проекту
Створити папку С:\Delphi\lab_11.
Створити новий проект.
У програмному модулі в розділі 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;
Для виклику процедури GrOfFunc створити процедуру обробки події OnPaint для об'єкта Forml. Ця процедура забезпечить накреслення графіка після відкриття форми в результаті запуску програми.
Для накреслення графіка після зміни розмірів форми створити процедуру обробки цієї події 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. Яка властивість містить інформацію про колір кожної точки графічної поверхні?