Скачиваний:
12
Добавлен:
30.05.2020
Размер:
670.78 Кб
Скачать

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

 

r

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

програма буде запущена(природно, тільки в тому випадку, якщо в програмі

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

m

 

 

w. .

o

помилок).

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

or

e

 

B

Y

 

 

 

 

 

 

m

B

 

 

 

 

 

buy

r

 

 

 

 

 

 

2

 

 

 

 

 

 

 

0

A

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

немає

 

 

m

 

w

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

 

2.10 Помилки

Компілятор переходить до другого етапу генерації виконуваної програми тільки в

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

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

звернути увагу на те, що компілятор не завжди може точно локалізувати помилку. Тому, аналізуючи фрагмент програми, який, «на думку» компілятора, містить помилку, потрібно звертати увагу не тільки на той фрагмент коду, на який компілятор встановив

курсор, але і на той, який знаходиться в попередньому рядку. Наприклад, в наступному фрагменті коду:

//обчислити струм

i = u/r

//. вивести результат в полі мітки

Label4->Caption = "Струм : " +

FloatToStrf(i,ffgeneral,7,2)+ " А";

не поставлена крапка з комою після оператора привласнення. Компілятор це

виявляє, виводить повідомлення statement missing ; але виділяє рядок Label4->Caption

="Струм : " + і встановлює курсор після ідентифікатора Label4.

Утаблиці. 2.10 перераховані типові помилки і відповідні ним повідомлення компілятора.

Таблиця 2.10. Типові помилки

Повідомлення

Undefined symbol

(невідомий символ)

Statement missing ;

(відсутня крапка з комою)

Помилка

 

 

 

 

Використовується

неоголошена

змінна

 

Ім'я

змінної, функції або параметра записано невірно.

Наприклад, в програмі оголошена зміннаSummа в

 

інструкціях використовується sum

 

 

 

Після інструкції не поставлена крапка з комою

31

AB

 

 

 

F

 

 

 

D

 

 

Y

P

B

Y

 

 

 

 

 

 

w

Click

 

 

 

w

 

 

 

w.

 

 

 

A

Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

or

e

 

 

 

 

 

 

Y

P

 

 

 

 

 

m

 

 

 

 

 

B

Y

 

 

 

 

 

 

buy

r

 

 

 

B

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

.

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

o

m

Unterminated

string or

 

 

 

 

w

 

 

.

 

 

 

 

 

 

 

w

 

w.

 

BBYY

c

character

constant(незавершена

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В кінці строкової константи, наприклад, тексту

 

 

 

 

 

строкова

або

символьна

 

повідомлення, немає подвійних лапок

 

 

 

 

 

 

 

 

 

 

 

константа)

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

T ansf

 

 

 

 

or

 

 

 

 

m

 

 

 

 

e

 

 

 

buy

r

 

 

 

0

 

 

 

 

2

 

 

to

 

.

 

here

 

 

 

 

 

m

 

 

 

 

 

 

 

o

 

 

 

.c

 

B BYY

 

) expected

(очікується

 

При записі арифметичного виразу, що містить

 

 

дужки,

порушений

баланс

відкриваючих

 

закриваюча дужка)

 

 

закриваючих дужок

 

 

 

 

 

 

 

 

 

if statement missing ( (у

інструкції if немає відкриваючої

дужки)

Compound statement missing }

У інструкції if умова не поміщена в дужки

Порушений баланс відкриваючих і закриваючих

фігурних дужок. Ймовірно, не поставлена закриваюча фігурна дужка що відзначає кінець функції або групи

інструкцій, наприклад, після умови або словаelse у інструкції if

Extra parameter

in call

 

Невірно записана інструкція виклику функції,

 

to(зайвий параметр при

виклику

 

 

вказаний зайвий параметр

функції)

 

 

 

 

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

пояснюється особливостями синтаксису мови, коли одна незначна помилка може

"тягнути" за собою досить велику кількість інших.

2.11 Попередження і підказки

При виявленні в програмі неточностей, які не є помилками, компілятор виводить

підказки (Hints) і попередження (Warnings). Наприклад, найбільш підказкою, що часто

виводиться, є повідомлення про оголошену, але не використовувану змінну(... is declared but never used.). Дійсно, навіщо оголошувати змінну і не використовувати її? У таблиці. 2.11 приведені попередження, що найчастіше виводяться компілятором.

Таблиця 2.11. Попередження компілятора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Попередження

 

 

Вірогідна причина

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не

 

... is declared but never used

 

Змінна

оголошена,

але

ніде

 

 

 

 

використовується

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Possibly

incorrect

assignment.

 

У

умові,

наприклад,

інструкції

if

 

 

 

(ймовірно,

інструкція

привласненнязамість

оператора

порівняння(==)

 

 

 

некоректна)

 

 

 

використаний оператор привласнення (=)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Possibly

use of ... before definition.

 

Не

привласнено початкове

значення

 

 

 

(ймовірно,

використовується

 

 

 

 

 

змінної

 

 

 

 

 

 

 

 

неініціалізована змінна)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

D

 

 

 

 

 

 

Y

P

 

 

 

 

or

e

 

B

Y

 

 

 

 

 

 

 

m

B

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

A

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

 

2.12 Компоновка

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

Якщо в програмі немає помилок, то можна виконати компоновку. Для цього треба в меню Compile вибрати команду Make або Build. Різниця між командами Make і Build

полягає в наступному. Команда Make забезпечує компоновку файлів проекту, а команда Build — примусову перекомпіляцію, а потім — компоновку.

На етапі компоновки також можуть виникнути помилки. Найчастіше причина помилок під час компоновки полягає в недоступності файлів бібліотек або інших

модулів, що раніше відкомпілювалися. Усуваються ці помилки шляхом налаштування середовища розробки і включенням в проект бракуючих модулів. У простих проектах помилки часу компіляції, як правило, не виникають.

2.13 Запуск програми

Пробний запуск програми можна виконати безпосередньо з середовищ розробки, не завершуючи роботу з C++ Builder. Для цього потрібно в меню Run вибрати команду Run або клацнути на командній кнопці Run (мал. 2.33).

Мал. 2.33. Запуск програми з середовища розробки

2.14 Помилки часу виконання

Під час роботи додатки можуть виникати помилки, які називаються помилками

часу виконання (run time errors) або виключеннями (exceptions). В більшості випадків

причинами виключень є невірні початкові дані.

Наприклад, якщо під час роботи програми обчислення сили струму в полі Напругу ввести ю.5, тобто розділити цілу і дробову частину крапкою, то в результаті

клацання на кнопці Обчислити на екрані з'явиться вікно з повідомленням про помилку

(мал. 2.34).

33

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

Мал. 2.34. Приклад вікна з повідомленням про помилку часу виконання (програма запущена з Windows)

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

цих двох символів є правильним, залежить від налаштування Windows.

Якщо в налаштуванніWindows вказане, що роздільник цілої і дробової частин числа — кома (для Росії це стандартна установка), а користувач використовував крапку

(ввів в поле Напругу (Edit1) рядок10.5), то при виконанні інструкції

u = StrToFloat(Editl->Text);

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

Якщо програма запущена з середовища розробки, то при виникненні виключення виконання програми припиняється і на екрані з'являється вікно з повідомленням про

помилку і її тип. Як приклад на мал. 2.35 приведено вікно повідомлення про виникнення

виключення, причина якого полягає в тому, що рядок, введений користувачем в полі редагування, не є дробовим числом.

Мал.

2.35. Приклад повідомлення про

виникнення

виключення(програма

запущена з C++ Builder)

 

 

Після

виникнення виключення і клацання

на кнопці

ОК у діалоговому вікн

Debugger Exception Notification (мал. 2.35) виконання програми можна перервати або,

не дивлячись на виниклу помилку, продовжити. Щоб перервати виконання програми,

треба в меню Run вибрати команду Program Reset щоб продовжити — команду Step Over.

Обробку виключень бере на себе код, що автоматично додається у виконувану

програму, який забезпечує, зокрема, і виведення інформаційного повідомлення. Разом з тим C++ Builder дає можливість програмі самій виконати обробку виключення.

34

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

Інструкція обробки виключення виглядає так:

try

{

// тут інструкції, виконання яких може викликати виключення

}

catch ( Тип &е)

{

// тут інструкції обробки виключення

}

де:

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

§try — ключове слово, що позначає, що далі слідують інструкції, при виконанні яких можливе виникнення виключень, і що обробку цих виключень бере на себе програма;

§catch — ключове слово, що позначає початок секції обробки виключення.

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

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

виникнення.

Таблиця 2.12. Типові виключення

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Виключення

 

 

 

Виникає

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EConvertError

 

 

При виконанні перетворення, якщо перетворювана

 

 

 

 

величина не може бути приведена до необхідного типу.

 

помилка перетворення

 

 

Найчастіше виникає при перетворенні рядка символів в

 

 

 

 

 

число

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EDivByZero

 

 

При

виконанні

операції

цілочисельного

ділення,

 

цілочисельне

ділення

 

 

на

 

нуль

 

 

 

якщо дільник дорівнює нулю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EZeroDivide

 

 

При

виконанні

операції

ділення над

дробовими

 

ділення на нуль

 

 

 

операндами, якщо дільник дорівнює нулю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При

виконанні

файлових

операцій. Найбільш

 

 

 

EInOutError

 

частою причиною є відсутність необхідного файлу або, у

 

 

 

помилка введення/виводу

 

 

разі використання змінного диска, відсутність диска

в

 

 

 

 

 

накопичувачі

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

35

AB

 

 

 

F

 

 

 

D

 

 

Y

P

B

Y

 

 

 

 

 

 

w

Click

 

 

 

w

 

 

 

w.

 

 

 

A

Tran

sf

 

 

 

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

or

e

 

 

 

Y

P

 

 

 

 

or

e

 

 

 

 

m

 

B

Y

 

 

 

 

 

 

 

 

m

 

 

buy

 

r

B

 

 

 

 

 

 

buy

r

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

0

 

 

 

 

 

 

 

 

0

 

to

 

 

 

 

.

A

 

 

 

 

 

 

 

to

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

У програмі обчислення сили струму виключення можуть виникнути при виконанні

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

c

 

перетворення рядків, введених в поля редагування, в числа і при обчисленні величини

 

 

c

 

 

 

.

 

 

 

 

 

 

 

 

w.

 

 

.

 

 

BBYY

 

 

 

 

 

 

 

 

 

 

A B BYY

 

 

 

струму. Виключення EConvertCrror виникне, якщо користувач неправильно введе числа в поля редагування: наприклад, розділив цілу і дробову частини крапкою. Виключення EZeroDivide виникне, якщо користувач задасть величину опору рівну нулю. У лістингу 2.3 приведена функція обробки події OnСlick на командній кнопці Обчислити. У функцію

включені інструкції обробки виключень.

Лістинг 2.3. Обробка виключень

void __fastcall TForm1::Button1Click(TObject *Sender)

{

 

float u;

// напруга

float r;

// опір

float i;

// струм

//отримати дані з полів введення

//можливе виключення — помилка перетворення рядка в число

try

{

u = StrToFloat(Editl->Text);

r = StrToFloat(Edit2->Text);

}

catch (EConvertError &e)

(

ShowMessage("При введенні дробових чисел використову кому.");

return;

}

//обчислити струм

//можливе виключення — ділення на нуль

try

36

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

{

i = u/r;

}

catch (EZeroDivide &e)

{

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

ShowMessage("Величина опору не має дорівнювати нулю"); Edit2->SetFocus(); // курсор а поле Опір

return; }

// вивести результат в полі мітки

Label4->Caption = "Струм : " +

FloatToStrf(i,ffgeneral,7,3);

У приведеній функції для виведення повідомлень у разі виникнення виключень

використана функція ShowMessage, яка виводить на екран вікно з текстом і командною

кнопкою .ОК Інструкція виклику функціїShowMessage виглядає так: ShowMessage(Повідомлення);

Де повідомлення — строкова константа (текст, який треба вивести). На мал. 2.36 приведений вид вікна повідомлення, отриманого в результаті виконання інструкції:

ShowMessage("Величина опору не має дорівнювати нулю.");

Мал. 2.36. Повідомлення, виведене функцією ShowMessage

Слід звернути увагу на те, що в заголовку вікна повідомлення, що виводиться функцією ShowMessage указується назва додатку. Назва додатку задається на вкладці Application вікна Project Options. Якщо назва додатку не задана, то в заголовку буде ім'я виконуваного файлу.

Для виведення повідомлень можна використовувати функціюMessagedig.

Функція Messagedig дозволяє помістити у вікно з повідомленням один із стандартних

значків, наприклад "Увага", задати кількість і тип командних кнопок і визначити, яку з

37

AB

 

 

 

F

 

 

 

D

 

 

Y

P

B

Y

 

 

 

 

 

 

w

Click

 

 

 

w

 

 

 

w.

 

 

 

A

Tran

sf

 

 

 

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

or

e

 

 

 

Y

P

 

 

 

 

or

e

 

 

 

 

m

 

B

Y

 

 

 

 

 

 

 

 

m

 

 

buy

 

r

B

 

 

 

 

 

 

buy

r

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

0

 

 

 

 

 

 

 

 

0

 

to

 

 

 

 

.

A

 

 

 

 

 

 

 

to

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

кнопок натиснув користувач. На мал. 2.37 приведено вікно, виведене в

 

 

 

 

 

Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

результаті

 

 

 

 

m

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

o

виконання інструкції

 

 

 

w

w.

 

 

 

 

 

o

 

 

 

c

 

 

 

 

 

 

 

 

 

 

c

 

 

 

.

 

 

 

 

 

 

 

 

 

 

.

 

 

BBYY

 

 

 

 

 

 

 

 

 

 

A B BYY

 

 

 

Messagedig("Файл c:\xtemp\\test.txt буде видалений.",

mtwarning, Tmsgdlgbuttons() « mbok « mbcancel, 0);

Мал. 2.37. Приклад вікна повідомлення

Значення функції Messagedig — число, перевіривши значення якого можна визначити, вибором якої командної кнопки був завершений діалог. У загальному вигляді

звернення до функції Messagedig виглядає так:

Вибор:= Messagedig(Повідомлення, Тип, Кнопки, Контекст справки)

де:

§повідомлення — текст повідомлення;

§Тип — тип повідомлення. Повідомлення може бути інформаційним, застережливим або повідомленням про критичну помилку. Кожному типу повідомлення

відповідає певний значок. Тип повідомлення задається іменованою константою

(таблиця. 2.13);

§кнопки — кнопки, що відображаються у вікні повідомлення. Задаються операцією включення в множину елементів — констант (таблиця. 2.14).

§контекст справки — параметр, який визначає розділ довідкової інформації, який з'явиться на екрані, якщо користувач натисне клавішу<F1>. Якщо виведення

довідкової інформації не передбачене, то значення параметра має дорівнювати нулю.

Таблиця 2.13. Константи, що визначають тип повідомлення

 

 

 

 

 

 

 

 

Константа

 

Тип повідомлення

 

Значок

 

 

 

 

 

 

 

 

 

MtWarning

 

Увага

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MtError

 

Помилка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mtlnformation

 

Інформація

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MtConfirmation

 

Підтвердження

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MtCustom

 

Звичайне

 

Без значка

 

 

 

 

 

 

 

 

38

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

Таблиця 2.14. Константи, що визначають кнопки у вікні повідомлення

Константа

 

Кнопка

 

Константа

 

Кнопка

mbYes

 

 

 

 

 

Abort

 

Yes

 

mbAbort

 

mbNo

 

 

 

 

 

Retry

 

No

 

mbRetry

 

mbOk

 

 

 

 

 

Ignore

 

OK

 

mblgnore

 

mbCancel

 

 

 

 

 

All

 

Cancel

 

mbAll

 

mbHelp

 

 

 

 

 

 

 

Help

 

 

 

 

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

Окрім приведених констант можна використовувати константиmbokcancel,

 

mbyesnocancel іmbabortretryignore. Ці

константи

визначають

найбільш

часто

використовувані в діалогових вікнах комбінації командних кнопок.

 

 

Значення, повертане функцією Messagedig (таблиця. 2.15)дозволяє визначити, яка з командних кнопок була натиснута користувачем.

Таблиця 2.15. Значення функції Messagedlg

 

 

 

 

 

 

Значення функції Messagedlg

 

Діалог завершений натисненням кнопки

 

 

 

 

 

 

 

mrAbort

 

Abort

 

 

 

 

 

 

 

mrYes

 

Yes

 

 

 

 

 

 

 

mrOk

 

Ok

 

 

 

 

 

 

 

mrRetry

 

Retry

 

 

 

 

 

 

 

mrNo

 

No

 

 

 

 

 

 

 

mrCancel

 

Cancel

 

 

 

 

 

 

 

mrlgnore

 

Ignore

 

 

 

 

 

 

 

mrAll

 

All

 

 

 

 

 

 

2.15 Внесення змін

Після декількох запусків програми "Сила струму" виникає бажання удосконалити

програму, внести до неї зміни. Наприклад, такі, щоб після введення напруги в результаті натиснення клавіші <Enter> курсор переходив в полі Опір, а після введення

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

зміни до програми, потрібно запустити C++ Builder і відкрити відповідний проект. Зробити це можна звичайним способом, вибравши в меню File команду Open Project.

Можна також скористатися командою Reopen з меню File. При виборі команди Reopen відкривається список проектів, над якими працював програміст останнім часом. У

лістингу 2.4 приведена програма "Сила струму", до якої внесені зміни: додані функції

39

AB

 

 

 

F

 

 

 

D

 

 

Y

P

B

Y

 

 

 

 

 

 

w

Click

 

 

 

w

 

 

 

w.

 

 

 

A

Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

or

e

 

 

 

 

 

 

Y

P

 

 

 

 

or

e

 

 

 

 

m

 

 

 

 

B

Y

 

 

 

 

 

 

 

 

m

 

 

buy

 

r

 

 

 

B

 

 

 

 

 

 

buy

r

 

 

 

2

 

 

 

 

 

 

 

 

 

 

2

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

0

 

to

 

 

 

 

.

 

 

 

A

 

 

 

 

 

 

 

to

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

обробки

подій OnKeyPress для

компонентів Edit1 і

Edit2. Щоб додати

 

 

 

 

 

Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в програму

 

 

 

m

 

 

 

 

 

m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

o

функцію

обробки події, треба у

вікніObject Inspector

вибрати компонент,

 

 

 

w

 

 

 

 

 

 

o

 

 

 

c

 

для якого

 

 

c

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

w.

 

 

.

 

 

BBYY

 

 

 

 

 

 

 

 

 

 

 

 

 

A B BYY

 

 

 

потрібно створити функцію обробки події, на вкладці Events вибрати подію і зробити подвійне клацання в полі поряд з ім'ям події. C++ Builder сформує шаблон функції обробки події. Після цього можна вводити інструкції, що реалізовують функцію.

Лістинг 2.4. Функції обробки подій на компонентах форми програми "Сила струму"

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

void__fastcall TForm1::Button1Click(TObject *Sender)

{

float u; // напруга float r; // опір float i; // струм

// перевіримо, чи введені дані в поля Напруга і Опір

if ( ((Edit1->Text).Length() == 0) || ((Edit2->Text).Length() ==0))

{

Messagedlg("Haдo ввести напругу і опір" mtlnformation, Tmsgdlgbuttons() << mbok, 0); if ((Editl->Text).Length() == 0) Edit1->SetFocus(); // курсор в полі Напруга else

Edit2->SetFocus(); // курсор в полі Опір return; }; // отримати дані з полів введення

u = StrToFloat(Editl->Text);

r = StrToFloat(Edit2->Text); // обчислити силу струму try

{

i = u/r;

}

catch (Ezerodivide &e)

40