Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IZVP_lab-novi.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
16.14 Mб
Скачать

Короткі теоретичні відомості

Починається головний модуль директивами компілятору (точніше, препроцесору). Директива #include <vcl.h> інформує компілятор, що перед тим як приступити безпосередньо до компіляції, в текст головного модуля потрібно включити заголовний файл бібліотеки візуальних компонентів - vcl.h. Рядок useform ("Project1.cpp", Forml) вказує, що в проект потрібно включити файл модуля форми Project1.cpp, який містить функції обробки подій для форми Forml. Далі слідує опис головної функції програми - WinMain. Функція WinMain ініціалізувала внутрішні структури програми, створює форму Forml і запускає програму, що приводить до появи на екрані стартової форми. Оскільки в проекті "Сила струму" тільки одна форма, то на екрані саме вона і з'являється. Інструкція обробки виключень catch виконується, якщо в програмі виникає помилка. Таким чином, головний модуль забезпечує вивід головної форми програми, подальшу поведінку якої визначають функції обробки подій цієї форми.

Крім головного модуля в склад проекту входять модулі форми. Для кожної форми C++ Builder створює окремий модуль, який складається з двох файлів: заголовного файлу і файлу коду (вміст цих файлів відображається у вікні редактора коду). Заголовний файл містить опис форми, файл коду (модуль форми) - - опис (текст) функцій, у тому числі і обробки подій.

Слід зазначити, що значну кількість роботи по генерації програмного коду виконав C++ Builder. Він повністю сформував головний модуль (Project1.cpp), заголовний файл модуля форми (Project1.h), значну частину модуля форми (Project1.cpp). Крім того, C++ Builder, аналізуючи дії програміста, сформував опис форми, файл проекту і файл ресурсів проекту.

Система підказок

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

Наприклад, після того, як буде набрано ім'я об'єкту (компоненту) і символи ->, редактор коду автоматично виведе список властивостей і методів об'єкту. Програмісту залишиться тільки вибрати із списку потрібний елемент і натискувати клавішу <Enter> (швидко перейти до потрібного елемента списку або до області, де цей елемент знаходиться, можна, натискує клавішу, відповідну першому символу цього елемента).

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

Навігатор класів

Вікно редактора коду розділено на дві частини В правій частині знаходиться текст програми. Ліва частина, яка називається навігатор класів (ClassExplorer), полегшує навігацію по тексту (коду) програми. В ієрархічному списку, структура якого залежить від проекту, над яким йде робота, перераховані об'єкти проекту (форми і компоненти) і функції обробки подій. Вибравши елемент списку, можна швидко перейти до потрібного фрагмента коду, наприклад до функції обробки події.

Шаблони коду

В процесі набору тексту зручно використовувати шаблони коду (Code Templates). Шаблон коду - це інструкція програми, записана в загальному вигляді. Наприклад, шаблон для інструкції if виглядає так:

if ( )

{

}

else { }

Редактор коду надає програмісту великий набір шаблонів: оголошення класів, функцій, інструкцій, вибору (if, switch), циклів (for, while).

Для того щоб в процесі набору тексту програми скористатися шаблоном коду і вставити його в текст програми, потрібно натискувати комбінацію клавіш <Ctrl>+<J> і із списку, що з'явився, вибрати потрібний шаблон

Навігатор класів

Вікно редактора коду розділено на дві частини. В правій частині знаходиться текст програми. Ліва частина, яка називається навігатор класів (ClassExplorer), полегшує навігацію по тексту (коду) програми. В ієрархічному списку, структура якого залежить від проекту, над яким йде робота, перераховані об'єкти проекту (форми і компоненти) і функції обробки подій. Вибравши елемент списку, можна швидко перейти до потрібного фрагмента коду, наприклад до функції обробки події.

Компіляція

Процес перетворення початкової програми у виконавчу складається з двох етапів: безпосередньо компіляції і компоновки. На етапі компіляції виконується переклад початкової програми в деяке внутрішнє уявлення. На етапі компоновки виконується збірка (побудова) програми.

Після введення тексту функції обробки події і збереження проекту можна, вибравши в меню Project команду Compile, виконати компіляцію. Процес і результат компіляції відображається в діалоговому вікні Compiling. Якщо, у програмі немає синтаксичних помилок, то вікно буде містити повідомлення: Done: Compile Unit, інакше буде виведено повідомлення Done: There are errors.

У випадку якщо компілятор знайде в програмі помилки і неточності, діалогове вікно Compiling буде містити інформацію про кількість синтаксичних (Errors) і семантичних (Warnings) помилок, а також про число підказок (Hints). Самі повідомлення про помилки, попередження і підказки знаходяться в нижній частині вікна редактора коду.

Щоб перейти до фрагмента коду, який, на думку компілятора, містить помилку, треба вибрати повідомлення про помилку (натиснути в рядку повідомлення лівою кнопкою миші) і з контекстного меню вибрати команду Edit Source.

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

Помилки

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

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

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

і = u/r

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

Label4->Caption = "Струм : - + FloatToStrF(і,ffGeneral,7,2) + " А";

не поставлена крапка з комою після оператора привласнення. Компілятор це знаходить, виводить повідомлення statement missing ; але виділяє рядок Labei4->Caption = "струм : - + і встановлює курсор після ідентифікатора Label 4.

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

При виявленні в програмі неточностей, які не є помилками, компілятор виводить підказки (Hints) і попередження (Warnings).

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

Під час роботи додатку можуть виникати помилки, які називаються помилками часу виконання (run time errors) або винятковими ситуаціями (exceptions). В більшості випадків причиною є невірні вхідні дані.

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

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

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

try

{

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

}

catch ( Тип &е)

{

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

}

де:

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

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

Основною характеристикою виняткової ситуації є його тип.

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

Виникає

EConvertError- помилка перетворення символів в число

EDivByZero - цілочисельне розподіл на нуль

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

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

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

При виконанні операції цілочисельного розподілу, якщо

дільник рівний нулю

При виконанні операції розподілу над дробовими операндами, якщо дільник рівний нулю

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

Приклад1. Перевірка, чи введені дані в поля Напруга і Опір

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

{

MessageDlg ("ввеіть напругу і опір",mtlnformation, TMsgDlgButtons()<< mbOK, 0);

if ((Editl->Text).Length()==0)

Editl->SetFocus(); // курсор в поле Напруга else

Edit2->SetFocus(); // курсор в поле Опір return;

};

Приклад2. Блок обробки виняткової ситуації ділення на нуль

try

{

i = u/r;

}

catch (EZeroDivide &e)

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

Edit2->SetFocus ( ) ; // курсор в полі Опір

return;

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

Label1->Caption = "Струм : " +FloatToStrF(і,ffGeneral,7,2) + " А"; }

// натиснення клавіші в полі Напруга

void __ fastcall TForml: :EditlKeyPress (TObject *Sender, char &Key)

// коди заборонених клавіш замінимо нулем, в результаті символи цих клавіш в полі редагування не з'являться

if ( ( Key >= '0') && ( Key <= '9')) // число

return;

// Глобальна змінна Decimalseparator містить символ, розділяючий дробові числа

if ( Key == Decimalseparator) {

if ( (Editl->Text).Pos(Decimalseparator) != 0)

Key =0; // роздільник вже введений

return; }

if (Key == VK_BACK) // клавіша <Backspace>

return;

if ( Key == VK_RETURN) // клавіша <Enter>

{

Edit2->SetFocus ( ) ;

return;

};

// решта клавіш заборонені

Key =0; //не відображати символ

}

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

void _ fastcall TForml: :Button2Click(TObject *Sender)

{

Forml->Close ( ) ; // закрити форму програми

}

Настройка додатку

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

Назва програми

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

Назву програми треба ввести в полі Title вкладки Application діалогового вікна Project Options, яке з'являється в результаті вибору в меню Project команди Options.

Значок додатку

Щоб призначити додатку значок, відмінний від стандартного, потрібно в меню Project вибрати команду Options і у вікні, що відкрилося, на вкладці Application клацнути на кнопці Load Icon. В результаті цих дій відкриється стандартне вікно, використовуючи яке можна проглянути каталоги і знайти відповідний значок (значки зберігаються у файлах з розширенням ico.

До складу C++ Builder входить утиліта Image Editor (Редактор зображень), за допомогою якої програміст може створити для свого додатку унікальний значок. Запустити Image Editor можна з C++ Builder, вибравши в меню Tools команду Image Editor, або з Windows - командою Пуск | Програми | Borland C++ Builder | Image Editor.

Щоб почати роботу із створення нового значка, потрібно в меню File вибрати команду New | Icon File (мал. 2.39)

Після вибору типу створюваного файлу відкривається вікно Icon Properties, в якому необхідно вибрати характеристики створюваного значка: Size (Розмір) -- 32х32 (стандартний розмір значків Windows) і Colors (Палітра) - 16 кольорів. В результаті натиснення кнопки ОК відкривається вікно Iconl.ico, в якому можна, використовуючи стандартні інструменти і палітру, намалювати потрібний значок.

Процес малювання в Image Editor практично нічим не відрізняється від процесу створення картинки в звичайному графічному редакторі, наприклад в Microsoft Paint. Проте є одна тонкість. Спочатку поле зображення зафарбовано "прозорим" кольором. Якщо значок намалювати на цьому фоні, то при відображенні значка частини поля зображення, зафарбовані "прозорим" кольором, приймуть колір фону, на якому буде знаходитися значок

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]