Структура простого проекту
Проектом є набір програмних одиниць — модулів.
Одін з модулів, званий головним, містить інструкції, з яких починається виконання програми. Щоб побачити головний модуль, потрібно в меню Project вибрати команду View Source . Як приклад в лістингу 2.5 приведений текст головного модуля програми "Сила струму".
Лістинг 2.5. Головний модуль (Amper.cpp)
#include <vcl.h>
#pragma hdrstop
USEFORM("Amper_l.cpp", Forml);
WINAPI Winmain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->initialize();
Application->title = "Сила струму";
Application->createform(__classid(Tforml), Sforml);
Application->run(); }
catch (Exception Sexception)
{
Application->showexception(Sexception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception Sexception)
{
Application->showexception(Sexception);
}
}
return 0;
}
Починається головний модуль директивами компілятору (точніше, препроцесору). Директива #include <vci,h> інформує компілятор, що перш ніж приступити безпосередньо до компіляції, в текст головного модуля потрібно включити заголовний файл бібліотеки візуальних компонентів — vcl.h. Рядок USEFORM("Amper_i.cpp", Form1) указує, що в проект потрібно включити файл модуля форми Amper_l.cpp який містить функції обробки подій для форми Form1. Далі слідує опис головної функції програми — winmain. Функція winmain ініціалізував внутрішні структури програми, створює форму Formi і запускає програму, що приводить до появи на екрані стартової форми. Оскільки в проекті "Сила струму" тільки одна форма, то на екрані саме вона і з'являється. Інструкція обробки виключень catch виконується, якщо в програмі виникає помилка. Таким чином, головний модуль забезпечує виведення стартової форми програми, подальшу поведінку якої визначають функції обробки подій стартової форми.
Окрім головного модуля до складу проекту входять модулі форми. Для кожної форми C++ Builder створює окремий модуль, який складається з двох файлів: заголовного файлу і файлу коди (вміст цих файлів відбивається у вікні редактора коди). Заголовний файл містить опис форми (лістинг 2.6), файл коди (модуль форми) — опис (текст) функцій, у тому числі і обробки подій (лістинг 2.7).
Лістинг 2.6. Заголовний файл модуля форми (Amper_1.h)
#ifndef Amper_1h
#define Amper_1h
#include <Classes.hpp>
#include «Controls.hpp>
#include <Stdctrls.hpp>
#include <Forms.hpp>
class Tforml : public Tform
{
__published: // Ide-managed Components
Tlabel *Label1;
Tlabel *Label2;
Tlabel *Label3;
Tedit *Editl;
Tedit *Edit2;
Tbutton *Buttonl;
Tbutton *Button2;
Tlabel *Label4;
void__fastcall Buttonlclick(Tobject *Sender);
void__fastcall Button2click(Tobject *Sender);
private: // User declarations
public: // User declarations
__fastcall Tforml(Tcomponent* Owner);
};
extern PACKAGE Tforml *Form1;
#endif
Лістинг 2.7. Модуль форми (Amper_1.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Amper_l.h"
#ragma package(smart_init)
#pragma resource "*.dfm"
Tform1 *Form1;
__fastcall Tforml::tforml(Tcomponent* Owner)
: Tform(Owner)
{
}
// клацання на кнопці Обчислити
void__fastcall Tforml::buttonlclick(Tobject *Sender)
{
float u; // напруга
float r; // опір
// отримати дані з полів введення
// можливе виключення
try
{
u = Strtofloat(Editl->text);
r = Strtofloat(Edit2->text);
}
catch (Econverterror &e)
{
Showmessage("При введенні дробових чисел використовуйте кому.");
return;
}
// обчислити силу струму
// можливе виключення
try
{
i = u/r;
}
catch (Ezerodivide &e)
{
Showmessage("Опір не має дорівнювати нулю");
Edit1->setfocus(); // курсор в полі Опір
return;
}
// вивести результат в полі влучні Label4->caption = "Струм : " +
Floattostrf(i,ffgeneral,7,3);
}
// клацання на кнопці Завершити
void__fastcall Tforml::button2click(Tobject *Sender)
{
Forml->close(); // закрити вікно програми
}
Слід зазначити, що значну кількість роботи по генерації програмної коди виконав C++ Builder. Він повністю сформував головний модуль (Amper.cpp) заголовний файл модуля форми (Amper_l.h) значну частину модуля форми (Amper_l.cpp). Крім того, C++ Builder, аналізуючи дії програміста, сформував опис форми, файл проекту і файл ресурсів проекту.
|