Подія і процедура обробки події

Вид створеної форми підказує, як працює додаток. Очевидно, що користувач повинен ввести в поля редагування вихідні дані і клацнути мишею на кнопці обчислити. Клацання на зображенні командної кнопки – це приклад того, що в Windows називається подією.
Подія (Event) – це те, що відбувається під час роботи програми. У Delphi кожній події присвоєно ім’я. Наприклад,  клацання кнопкою миші – це подія OnClick, подвійне клацання мишею подія OnDblClick.

У табл. В9 наведені  деякі події Windows.

Таблиця В9. Події

Подія Відбувається
OnClick При натисканні кнопкою миші
OnDblClick При подвійному натисканні кнопкою     миші
OnMouseDown При натисканні кнопки миші
OnMouseUp При видпуску кнопки миші
OnMouseMove При переміщенні миші
OnKeyPress При натисканні клавіші клавіатури
OnKeyDown При натисканні клавіші клавіатури.  Події OnKeyDown і OnKeyPress – це чергуються, повторюються події, які відбуваються до тих пір, поки не буде відпущена утримувана клавіша (В цей момент відбувається подія OnKeyUp)
OnKeyUp  При відпуску натиснутою клавіші клавіатури
OnCreate При створенні об’єкта (форми,елемента управління). Процедура обробки цієї події зазвичай використовується для ініціалізації змінних, виконання підготовчих дій
OnPaint При появі вікна на екрані на початку роботи програми, після появи частини вікна, яка, наприклад, була закрита іншим вікном, і в інших випадках
OnEnter При отриманні елементом управління фокуса
OnExit При втраті елементом управління фокуса

Реакцією на подію повинно бути будь-яку дію. У Delphi реакція на подію реалізується як процедура обробки події. Таким чином, для того щоб програма виконувала деяку роботу у відповідь на дії користувача, програміст повинен написати процедуру обробки відповідної події. Слід звернути увагу на те, що значну частина обробки подій бере на себе компонент. Тому програміст повинен розробляти процедуру обробки події тільки в тому випадку, якщо реакція на подія відрізняється від стандартної або не визначена. Наприклад, якщо за умовою завдання обмежень на символи, що вводяться в поле Edit, немає, то процедуру обробки події OnKeyPress писати не треба, т. к. під час роботи програми буде використана стандартна (прихована від програміста) процедура обробки цієї події.

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

Щоб приступити до створення процедури обробки події, треба спочатку у вікні Object Inspector вибрати компонент, для якого створюється процедура обробки події. Потім в цьому ж вікні потрібно вибрати вкладку Events (Події).


Рис. В26. На вкладці Events перераховані події, які може сприймати компонент (В даному випадку – командна кнопка)

У лівій колонці вкладки Events (рис. В26) перераховані імена подій, які може сприймати обраний компонент (об’єкт). Якщо для події визначена (написана) процедура обробки події, то в правій колонці поруч з ім’ям події виводиться ім’я цієї процедури.

Для того щоб створити функцію обробки події, потрібно зробити подвійне клацання мишею в полі імені процедури обробки відповідної події. В результаті цього відкриється вікно редактора коду, в яке буде доданий шаблон процедури обробки події, а у вікні Object Inspector поруч з ім’ям події з’явиться ім’я функції його обробки (рис. В27).

Delphi привласнює функції обробки події ім’я, яке складається з двох частин. Перша частина імені ідентифікує форму, яка містить об’єкт (компонент), для якого створена процедура обробки події. Друга частина імені ідентифікує сам об’єкт і подія. У нашому прикладі ім’я форми – Form1, ім’я командної кнопки – Buttoni, а ім’я події – Click.

Рис. В27. Шаблон процедури обробки події, згенерований Delphi

У вікні редактора коду між словами begin і end можна друкувати інструкції, що реалізують функцію обробки події.

У лістингу В1 наведений текст функції обробки події onclick для командної кнопки Обчислити. Зверніть увагу на те, як представлена програма. Її загальний вигляд відповідає тому, як вона виглядає у вікні редактора коду: ключові слова виділені напівжирним, коментарі – курсивом (виділення виконує редактор коду). Крім того, інструкції програми набрані з відступами відповідно до прийнятих в середовищі програмістів правилами хорошого стилю.

Лістинг В1. Процедура обробки події OnClick на кнопці Button1 (Обчислити)

// натискання кнопки Обчислити

procedure TForm1.ButtonlClick (Sender: TObject);

var

dist: integer; // дистанція, метрів

t: real; // час як дробове число

min: integer; // час, хвилини
sek: integer; // час, секунди

v: real; // швидкість

begin

// отримати вихідні дані з полів введення
dist: = StrToint (Edit1.Text); t: = StrToFloat (Edit2.Text);

// попередні перетворення

min: = Trunc (t); // кількість хвилин - це ціла частина числа t

sek: = Trunc (t * 100) mod 100;
// кількість секунд - це дрібна частина

// числа t

// обчислення

v: = (dist / 1000) / ((Min * 60 + sek) / 3600);

// висновок результату

label4.Caption : = 'Дистанція:' + Edit1.Text
+ 'м' + # 13 + "Тайм-аут: '+ IntToStr (min)
+ 'хв' + IntToStr (sek) + 'S' + # 13 +

'Швидкість:' + FloatToStrF (v, ffFixed, 4,2) + 'км / год';

end;

Функція Button1click виконує розрахунок швидкості і виводить результат розрахунку в поле Label4. Вихідні дані вводяться з полів редагування Editl і Edit2 шляхом звернення до властивості Text. Властивість Text містить рядок символів, яку під час роботи програми введе користувач. Для правильної роботи програми рядок повинен містити тільки цифри. для перетворення рядки в числа в програмі використовуються функції StrToInt і strToFloat. функція strToInt перевіряє символи рядка, переданої їй як параметр (Edit1.Text – це вміст поля Editl), на допустимість і, якщо все символи вірні, повертає відповідне число. Це число записується в змінну dist. аналогічним чином працює функція strToFioat, яка повертає дробове число, відповідне вмісту поля Edit2. Це число записується в змінну t.

Після того як вихідні дані будуть поміщені в змінні dist та t, виконуються підготовчі дії і розрахунок. Спочатку з ис користуванням функції Trunc, яка “відкидає ” дробову частину числа, виділяється ціла частина змінної t – це кількість хвилин. Значним вираження Trunc (t * 100) mod 100 є кількість секунд. Обчислюється цей вислів так. спочатку число t множиться на 100. Отримане значення передається функції Trunc, яка повертає цілу частину результату множення t на 100. Отримане таким чином число ділиться по модулю на 100. Результат ділення по модулю – це залишок від ділення.

Після того як всі дані готові, виконується розрахунок. Так як швидкість повинна бути виражена в км / год, то значення дистанції і часу, виражені в метрах і хвилинах, перетворюються в кілометри і годинник.

Обчислення значення швидкості виводиться в поле Label4 шляхом надання значення властивості Caption. для перетворення чисел в рядки використовуються функції IntToStr І FloatToStr.

В результаті натискання кнопки Завершити програма повинна завершити роботу. Щоб це сталося, треба закрити, прибрати з екрану, головне вікно програми. Робиться це за допомогою методу close. процедура обробки події Onclick для кнопки Завершити наведена в лістингу В2.

Лістинг В2. Процедура обробки події Onclick на кнопці Button2 (Завершити)

// натискання кнопки Завершити

procedure TForm1.Button2Click (Sender: TObject);

begin

Form1.Close; // закрити головне вікно програми

end;

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *