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