Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика_Delphi.doc
Скачиваний:
11
Добавлен:
25.08.2019
Размер:
2.92 Mб
Скачать

Внимание!

Если Вы хотите отменить прорисовку фона текста, а фон задается и выполняется Delphi отдельно для каждого компонента, следует отменить стиль кисти для объекта Font непосредственно перед печатью текста:

Brush.Style:=bsClear;

У прикладі еліпс заповнюється малюнком, зразок якого зберігається у файлі rs.bmp. Напис виконується з виключенням текстового фону.

Лістинг програми unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class (TForm) procedure FormPaint (Sender: TObject); private (Private declarations) public (Public declarations) end; var Form1: TForm1; implementation ($ R *. dfm) procedure TForm1.FormPaint (Sender: TObject); var rs: TBitmap; begin      rs: = TBitmap.Create;      rs.LoadFromFile ( 'rs.bmp');      with Form1.Canvas do begin             Brush.Bitmap: = rs; // стиль кисті передається наступному об'єкту             Ellipse (20,20,180,80);             Brush.Style: = bsClear; (стиль кисті ( «підкладка» написи) очищаємо, залишаючи            Windows тільки параметр виводу тексту:)             Font.Color: = clYellow;             Font.Size: = 16;             Font.Style: = [fsBold];             TextOut (70,40, 'ТСО-2005'); end; end; end.

Лабораторна робота № 13 «Створення проекту «Побудова графіка функцій»»

Мета: 1. Навчитися створювати графічні малюнки з використанням об’єкта Canvas.

2. Навчитися використовувати методи побудови простих графічних об’єктів в мові програмі Delphi.

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

Завдання. Створити програму, результатом роботи якої буде по­будова на екрані графіка функції

f(x) = 2sin x-e5

на інтервалі [0; 25]

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

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

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

Як правило, графік будується на основі формули. Межі діапазону зміни аргументу функції є вхідним даними. Діапазон зміни значень функції можна обчислити. Виходячи з цих даних, можна визначити масштаб, що дасть змогу побудувати графік таким чином, щоб він займав усю область форми.

Наприклад, якщо деяка функція f(x) може набувати значення від 0 до 1000 і для виведення її графіка використовується область заввишки 250 пікселей, то масштаб вісі Оу обчислюється за формулою:

m = 250/1000.

Отже, значенню f(x) = 1000 відповідатиме точка області з координатою у = 0, оскільки

y = 250 –f(x) * m= 250 - 1000 • (250/1000). Значенню f(x) = 70 відповідатиме точка з координатою y = 233, то у = 250 - 70 • (250/1000) (тут значення заокруглене через те, що координата може бути тільки цілим числом).

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

  1. Створити папку D:\DeIphi\Pract_12.

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

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

procedure GrOfFunc;

var

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

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

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

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

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

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

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

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

function f (х:real):real;

begin

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

begin

l:=10;

b:=Forml.ClientHeight-20; h:=Forml.ClientHeight-40;

w:=Forml.ClientWidth-40;

xl:=0;x2:=25;

dx:=0.001;

yl:=f(xl);y2:=f(x2);

x:=xl;

repeat y:=f(x);

if y<yl then yl:=y;if y>y2 then y2:=y;

x:=x+dx;

until (x>=x2);

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

х0:=1;

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

with Forml.Canvas do

begin

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

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

TextOut(1+5,b-h,FloatToStrF(y2,ffgeneral,6,3));

TextOut(1+5,b,FloatToStrF(yl,ffgeneral,6,3));

x:=xl;

repeat y:=f(x);

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

x:=x+dx;

until (x>=x2); end; end;

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

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

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

Завдання для самостійного виконання

1.Змінити програму так, щоб осі виводились зеленим кольором, а графік функції— синім. Підписати осі координат. Підказка. Перед виведенням осей координатної площини встановити колір пера clGreen та для підпису осей виконати дії:

Font.Name:='arial';

Font.Size:=10;

Textout(x0+5,y0+5,'y=2*sin(x)*exp(x/5)');

Textout(x0+w-5,y0-8,'>’);

Textout(x0+w-5,y0+5, ' X') ;

Textout(l-3,b-h-15,'/\ Y');

Для виведення графіка синіми пікселями встановити колір clBlue.

2.На форму з графіком вивести аналітичний вигляд функції, графік якої побудовано.

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

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.