Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗВІТ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

Розділ II. Програмування інтерфейсу користувача засобами ооп (Варіант 2) Тема 2.1. Форми та компоненти

2.1.1 Особливості роботи з компонентами Delphi Обчислення виразів. Умовний оператор

Мета роботи: використання лінійного та розгалуженого алгоритмів в процесі розробки програми, з використанням основних компонентів, математичних фукнцій.

Завдання роботи: Дано x, y, z. Обчислити min(a, b, c), якщо ; ; .

Теоретичні відомості: У даному завданні використовувався умовний оператор. Умовний оператор перевіряє певну умову і виводить результат в залежності від заданої умови перевірки.

Формат запису умовного оператора:

If <умова> then <оператор1> else <оператор2>;

Де <умова> - довільний вираз логічного типу, може приймати одно з двох значень: істина або хибно. Такі вирази можна одержати при порівнянні змінних в операціях відношення =, <>, >, <, >=,<=. Складені логічні вирази утворюються з використанням логічних операцій and, or, not.

Скорочена форма умовного оператора записується:

If <умова> then <оператор1>;

Лістинг :

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Label4: TLabel;

Edit4: TEdit;

Image1: TImage;

Image2: TImage;

Image3: TImage;

procedure Button1Click(Sender: TObject);

private

function min(a, b, c: real): real;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

x, y, z, a, b, c, h: real;

begin

x := strtofloat(edit1.Text);

y := strtofloat(edit2.Text);

z := strtofloat(edit3.Text);

a := (x * y / y) + (z / x * y);

b := (sin(x * y + z) / z) - cos(1 + z / x * y) + 0.5;

c := ln(100) / ln(10) - sqrt(sqr((x * y / z) + (z / x * y))) + 5;

edit4.text := floattostrf(a, ffFixed, 10, 2);

edit4.text := floattostrf(b, ffFixed, 10, 2);

edit4.text := floattostrf(c, ffFixed, 10, 2);

h := min(a, b, c);

end;

function TForm1.min(a, b, c: real): real;

begin

if (a < b) and (a < c) then

min := a;

if (b < a) and (b < c) then

min := b;

if (c < a) and (c < b) then

min := c;

end;

end.

Інтерфейс програми:

Рисунок 1. Режим конструктора

Рисунок 2. Результат виконання

2.1.2 Умовні та циклічні оператори; Обчислення, табулювання та малювання графіка функції. Захист программ паролем, знімок екрану, поведінка об’єктів, практичні приклади.

Мета роботи : Створення простого додатку, який включає введення вихідних даних, розв’язок і виведення результатів на екран. Знайомство з можливостями Delphi. Виконання основних операторів, проектування умовного обчислювального процесу, циклічного процесу, основи роботи з декількома формами, спеціальними графічними компонентами. повторити компоненти виведення графічної інформації, їх основні властивості, удосконалити навички роботи з файлами, повторити можливості роботи з стандартними діалоговими вікнами; Повторити основні події компонентів, Навчитися створювати випливаючи підказки до компонентів, Познайомитись з основними можливостями компонента Memo.

Завдання роботи: Завдання 1. Створити додаток для обчислення и виведення на екран значення функції:

Вирази для функції f1(x), f2(x) і f3(x) вибрати із таблиці 2 у відповідності свого варіанту з номером ПК. На формі передбачити поля для введення значення параметра а и змінної х, виведення результату, обчислення y, а також командні кнопки для здійснення обчислення і виходу із програми. Введені дані повинні підлягати контролю на допустимість введення. Завдання 2. Створити додаток для виведення на екран в окрему форму таблиці значень функції, опис якої приведено в таблиці. Діапазон і крок зміни аргументу вводить при виконанні додатку. Визначити максимальне і мінімальне значення в заданому діапазоні методом перебору. При створенні проекту використовувати проект, створений в попередньому завданні. Завдання 3. На основі проекту попереднього проекту розробити проект, включивши побудову графіка функції. Передбачити масштабування графіка в залежності від розмірів вікна. Завдання 4. Розробити програму, яка зніматиме і зберігатиме копію екрану; Створити випливаючи підказки для компонентів; Створити пароль до програми. Теоретичні відомості:

У програмі цикл може бути реалізований за допомогою інструкцій for, while і repeat.

Оператор for

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

Оператор циклу з параметром має наступний вигляд:

FOR параметр циклам := поч. знач. ТО кін. знач. DO оператор; або FOR параметр циклу := поч. знач. DOWNTO кін. знач. DO оператор;

Тут FOR (для), ТО (до), DO (виконати) DOWNTO (вниз до), - службові слова;

параметр циклу - змінна будь-якого скалярного типа, окрім речовинного;

поч. знач., кін. знач. - скалярні вирази того ж типа, що і параметр циклу;

оператор - будь-який оператор мови.

Крапку з комою після do не ставлять.

При використанні в циклі службового слова ТЕ значення параметра циклу збільшується, при DOWNTO - зменшується. Крок зміни параметра циклу залежить від його типа. Найчастіше використовується змінна цілого типа, що визначає крок, рівний 1 при ТЕ, і -1 - при DOWNTO.

Оператор while.

Оператор (цикл) while використовується в тому випадку, якщо деяку послідовність дій (інструкцій програми) треба виконати кілька разів, причому необхідне число повторень під час розробки програми невідомо і може бути визначено тільки під час роботи програми. Типовими прикладами використання циклу while є обчислення із заданою точністю, пошук в масиві або у файлі.

Оператор repeat .

Оператор repeat, як і оператор while, використовується в програмі в тому випадку, якщо необхідно виконати повторні обчислення (організувати цикл), але число повторень під час розробки програми невідомо і може бути визначено тільки під час роботи програми, тобто визначається ходом обчислень. За допомогою методу Application.run програма підключаєгься до циклу обробки повідомлень Windows. Перед запуском додатку програміст може викликати дiaлoгoвe вікно iз запитом пароля й блокувати виклик методу Application.run, якщо введений пароль невірний. У проекті використовується дiaлoгoвe вікно, яке створюється стандартною функціею InputQuery модуля Dialogs. Це діалогове вікно включає рядок вводу TEdit i кнопки Ok i Cansel. У випадку натискання на кнопку Ok рядковій змінної Passwоrd привласнюється значення, введене користувачем у рядок вводу. Якщо пароль вірний, викликаються методи Run i CreateForm об'єкта Application.

procedure Tform1.FormActivate(Sender: TObject);

begin

repeat

InputQuery('Вікнo введения пароля', ' Введіть пароль: ', Password);

if Password<>'Delphi' then ShowMessage('Пароль не вірний!')

until Password='Delphi';

Application.CreateForm(TMainForm, MainForm); Application.Run;

end;

Розробка форми Створіть новий проект Delphi і змініть заголовок форми (властивість Caption) на Screenshot. Щоб користувач не міг змінювати розміри вікна при роботі з програмою, слід надати властивості BorderStyle значення bsDialog. Для зручності створення копій екрану вікно програми повинне бути завжди розміщене поверх решти вікон. Для цього надамо властивості FormStyle значення fsStayOnTop. Ми можемо собі це дозволити: на самій копії екрану вікно нашої програми відображено не буде, оскільки у момент створення копії воно буде тимчасово приховано. Для збереження копії екрану нам знадобиться компонент SaveDialog категорії Dialogs. Розмістити цей компонент на формі. Оскільки ми наперед знаємо, що зберігатимемо малюнок, то властивості SaveDialogl.Filter надати значення Малюнок | * . bmp | Всі файли | *. *. При збереженні файлу у користувача буде вибір: зберігати файл як малюнок (* . bmp) або як будь-який інший файл (*.*). Розмістити уздовж правого краю форми чотири кнопки (компоненти Button категорії Standard) з наступними заголовками (властивість Caption): Зробити знімок екрану, Показати знімок, Очистити, Зберегти. Також нам буде потрібно компонент, який буде відображати отриману копію екрану. Для цих цілей ми будемо використовувати компонент Image категорії Additional. Потрібно змінити його ім'я (властивість Name) на Screenl, а властивості Proportional надамо значення True. На цьому розробка форми завершена. Отриманий результат повинен приблизно відповідати малюнку: Розробка програмного коду. Спочатку оголосимо всі змінні, якими будемо користуватись в програмі:

var

Forml: TForml; //головна форма

BMP1: Graphics.TBitmap; //для роботи з малюнками (*.bmp)

DC1: HDC; //просте поле для графіки

Imagel: TImage;

Найголовніша подія в програмі — це натиснення кнопки Зробити знімок екрану. Створимо обробник цієї події:

procedure TForml.ButtonlClick(Sender: TObject);

begin

Forml.Visible := False; //ховаємо форму

Sleep(15); //пауза 15 мс

BMP1 := Graphics.TBitmap.Create;

//задаємо розміри малюнка такі ж як розміри екрану

ВМР1.Height := Screen.Height;

ВМР1.Width := Screen.Width;

DC1 := GETDC(O);

//Створюємо копію екрану

BitBlt(BMPl.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);

Forml.Visible := True; //відновлюємо вікно програми

Imagel := TImage.Create(nil);

BMP1.IgnorePalette := True;

Imagel.Picture.Assign(BMP1);

BMP1.SaveToFile(‘с:\1.bmp’); //сохраняем знімок у файл

End; Перш ніж зробити знімок екрану, ми ховаємо вікно програми, робимо паузу в 15 мс і задаємо розміри майбутнього малюнка. Після цього робимо знімок екрану і зберігаємо його у файл 1.bmp, який знаходиться на диску C:\. При натисненні кнопки Показати малюнок виконуємо наступний код:

procedure TForml.Button4Click(Sender: TObject); begin

Screenl.Show; // робимо малюнок видимим

if FileExists('с:\1.bmp1) then //якщо малюнок існує

Screenl.Picture.LoadFromFile('с:\1.bmp'); //загружаем его

end;

При натисненні кнопки Очистити ми повинні приховувати малюнок і видаляти його з диска:

procedure TForml.Button3Click(Sender: TObject);

begin

//видаляємо малюнок з диска

if FileExists('с:\1.bmp’)

then DeleteFile(‘С:\1.bmp’);

Screenl.Hide; //ховаємо малюнок

end;

Для збереження малюнка використовуватимемо діалогове вікно.

Код натиснення кнопки Зберегти:

procedure TForml.Button2Click(Sender: TObject);

begin

if SaveDialogl.Execute

then

BMP1.SaveToFile(SaveDialogl.FileName) //сохраняем малюнок

else ShowMessage('Файл не був збережений!’);

end;

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

Лістинг:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, jpeg, ExtCtrls, ComCtrls, TeEngine, Series,

TeeProcs, Chart, XPMan, Buttons;

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

Image1: TImage;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

Label6: TLabel;

Label7: TLabel;

StringGrid1: TStringGrid;

Edit5: TEdit;

Edit6: TEdit;

Chart1: TChart;

Series1: TLineSeries;

XPManifest1: TXPManifest;

BitBtn1: TBitBtn;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Screen1: TImage;

SaveDialog1: TSaveDialog;

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit3Exit(Sender: TObject);

procedure Edit4Exit(Sender: TObject);

procedure PageControl1Change(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

BMP1: Graphics.TBitmap; //для роботи з малюнками (*.bmp)

DC1: HDC; //просте поле для графіки

Screen1: TImage;

implementation

{$R *.dfm}

function f(a, x: real): real;

begin

if x <= 0 then

f := 5 * a * x + 2;

if (0 < x) and (x <= a) then

f := 5 / (x + 0.5 * (exp(1.5 + ln(abs(a)))));

if x > a then

f := 0.5 / sin(a * x + 1);

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

if Edit1.text <> '' then

try

strtofloat(edit1.text);

except

showmessage( 'Введено невірне значення А');

pagecontrol1.Activepageindex := 0;

edit1.Clear;

edit1.SetFocus;

end;

end;

procedure TForm1.Edit2Exit(Sender: TObject);

begin

if Edit2.text <> '' then

try

strtofloat(edit2.text);

except

showmessage( 'Введено невірне значення X');

pagecontrol1.Activepageindex := 0;

edit2.Clear;

edit2.SetFocus;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Screen1.Show; // робимо малюнок видимим

if FileExists('D:\ПРАКТИКА\DELPHI\третя практична\1.bmp') then //якщо малюнок існує

Screen1.Picture.LoadFromFile('D:\ПРАКТИКА\DELPHI\третя практична\1.bmp');

end;

procedure TForm1.Edit3Exit(Sender: TObject);

begin

if Edit3.text <> '' then

try

strtofloat(edit3.text);

except

showmessage( 'Введено невірне значення X');

pagecontrol1.Activepageindex := 0;

edit3.Clear;

edit3.SetFocus;

end;

end;

procedure TForm1.Edit4Exit(Sender: TObject);

begin

if Edit4.text <> '' then

try

strtofloat(edit4.text);

except

showmessage( 'Введено невірне значення H');

pagecontrol1.Activepageindex := 0;

edit4.Clear;

edit4.SetFocus;

end;

end;

procedure TForm1.PageControl1Change(Sender: TObject);

var

H, Xn, Xk, A, X, Y, Xmax, Ymax, Xmin, Ymin: real;

var

s, s1: string;

begin

if edit1.text = '' then

begin

showMessage('Відсутнє значення А');

pagecontrol1.Activepageindex := 0;

edit1.setfocus;

end

else if edit2.text = '' then

begin

showmessage('Відсутнє початкове значення Х');

pagecontrol1.Activepageindex := 0;

edit2.setfocus;

end

else if edit4.text = '' then

begin

showmessage('Відсутній крок Н');

pagecontrol1.Activepageindex := 0;

edit4.setfocus;

end

else if edit3.text = '' then

begin

showmessage('відсутнє кінцеве значення Х');

pagecontrol1.Activepageindex := 0;

edit3.setfocus;

end

else if strtofloat(edit3.text) <= strtofloat(edit2.text) then

begin

showmessage('Початкове знач Х повино бути менше кінцевого!');

pagecontrol1.Activepageindex := 0;

edit3.setfocus;

end

else

begin

stringgrid1.Cells[0, 0] := 'X';

stringgrid1.Cells[1, 0] := 'y(X)';

stringgrid1.GridLineWidth := 2;

stringgrid1.RowCount := 2;

a := strtofloat(Edit1.text);

xn := strtofloat(Edit2.Text);

xk := strtofloat(edit3.text);

h := strtofloat(Edit4.Text);

x := xn;ymax := -maxlong;ymin := maxlong;

chart1.SeriesList.Series[0].Clear;

while x <= xk do

begin

y := f(x, a);

if y > ymax then

begin

ymax := y; xmax := x;

end;

if y < ymin then

begin

ymin := y; xmin := x;

end;

str(x:0:2, s);

stringgrid1.cells[0, stringgrid1.RowCount - 1] := s;

str(y:0:4, s);

stringgrid1.Cells[1, stringgrid1.rowcount - 1] := s;

stringgrid1.RowCount := stringgrid1.RowCount + 1;

chart1.SeriesList.Series[0].AddXY(X, Y, '', clred);

x := x + h;

end;

stringgrid1.RowCount := stringgrid1.Rowcount - 1;

str(ymax:0:4, s);

str(xmax:0:3, s1);

edit5.text := 'Y=' + s + ' при X=' + s1;

str(ymin:0:4, s);

str(xmin:0:3, s1);

edit6.text := 'Y=' + s + ' при X=' + s1;

end;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

PageControl1.ActivePageIndex := 0;

edit1.setfocus;

end;

procedure TForm1.FormCreate(Sender: TObject);

var

password: string;

begin

repeat

InputQuery('Вікнo введения пароля', ' Введіть пароль: ', Password);

if Password <> 'croker' then ShowMessage('Пароль не вірний!')

until Password = 'croker';

Application.Run;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.Visible := False; //ховаємо форму

Sleep(15); //пауза 15 мс

BMP1 := Graphics.TBitmap.Create;

//задаємо розміри малюнка такі ж як розміри екрану

BMP1.Height := Screen.Height;

BMP1.Width := Screen.Width;

DC1 := GETDC(0);

//Створюємо копію екрану

BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);

Form1.Visible := True; //відновлюємо вікно програми

Image1 := TImage.Create(nil);

BMP1.IgnorePalette := True;

Image1.Picture.Assign(BMP1);

BMP1.SaveToFile('D:\ПРАКТИКА\DELPHI\третя практична\1.bmp'); //сохраняем знімок у файл

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if FileExists('D:\ПРАКТИКА\DELPHI\третя практична\1.bmp')

then DeleteFile('D:\ПРАКТИКА\DELPHI\третя практична\1.bmp');

Screen1.Hide;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

if SaveDialog1.Execute

then

BMP1.SaveToFile(SaveDialog1.FileName) //сохраняем малюнок

else ShowMessage('Файл не був збережений!');

end;

end.