Особливості роботи в середовищі C++ Builder

Система об’єктно-орієнтованого програмування С++ Builder виробництва корпораціїBorland призначена для операційних систем Windows 9х—ХР. Вона функціонує під керуванням ОС типу Microsoft Windows.

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

Структура класів, створених мовою С++ системи програмування Borland С++ Builder,побудована в бібліотеці VCL (Visual Component Library) і містить потужний набір засобів та бібліо­тек, що підвищують продуктивність праці програмістів і скоро­чують тривалість циклу розроблення.

Багатофункціональне інтегроване середовище С++ Builder містить компілятор, який відповідає вимогам стандарту ANSI/ISO, вбудований дизайнер форм, багатий набір засобів для роботи з ком­понентами, інструмент Object Inspector, менеджер проектів і налагоджувач. Новий багатоцільовий менеджер проектів з відкритою архітектурою забезпечує повний контроль над вихідними текстами і процесом компоновки, що дозволяє переглядати залеж­ності модулів вихідного коду і настроювати параметри компіля­ції,компоновки і налагодження для кожного з модулів проекту. За допомогою цього середовища можна створити додаток будь-якої складності з привабливим графічним інтерфейсом [2,19].

Для запуску системи необхідно активізувати середовище С++ Builder, тобто двічі клацнути мишкою на зображенні ярличка з відповідним написом, або виконати послідовність команд Пуск | Програми | C++Builder. На екрані монітора з’явить­ся головне вікно (див. рис. 12.1), на якому розміщені такі еле­менти — заголовок, панель керування системою, вікно форми (так званий візуальний проектувальник), вікно інспектора об’єк­тів (Object Inspector), а також вікно редактора програмного ко­ду додатка, що зазвичай приховане за вікном форми. Переключення між вікном коду і вікном форми здійснюється з вико­ристанням клавіші F12 або клацанням мишкою на будь-якій видимій частині відповідного вікна.

Опишемо стисло основні складові частини та принципи роботи системи Borland С++Builder, які найчастіше використо­вуються.

Панель керування (див. рис. 12.2) має рядок меню, панель інструментів, що містить командні кнопки для виконання дій, та палітру компонентів.

Палітра компонентів (див. рис. 12.3) має набір елементів керування, з яких створюється інтерфейс програми. Палітру компонентів розбито на сторінки, тобто розділи, кожен з яких має згруповані компоненти, близькі за призначенням. У прикладах, розглянутих далі, будуть використовуватися сторінки Standard та Additional.

Зображення і назви наборів компонентів сторінок Standard та Additional представлені утабл. 12.1 і табл. 12.2

Візуальний проектувальник (дизайнер форм) використову­ється для створення інтерфейсу програми. Він необхідний для створення форм, тобто вікон Windows, у яких містяться різні елементи керування. У програмі звичайно є головна і додаткові форми, кількість яких не обмежена.

Редактор коду призначений для написання тексту програ­ми, зокрема оброблювачів подій, і складається з трьох панелей:

  • панелі переглядача класів (Class Explorer);
  • панелі редактора тексту програми;
  • панелі переглядача об’єктів (Object tree view).

Інспектор об’єктів необхідний для завдання властивостей об’єктів і визначення їхньої реакції на різні події. Властивість об’єкта — це одна з його характеристик, наприклад, ширина для кнопки, назва для вікна, колір і стиль для шрифту. Інспектор об’єктів дозволяє швидко і зручно змінювати будь-які влас­тивості поточного, тобто виділеного на формі, об’єкта.

Інспектор об’єктів складається з декількох частин і містить дві вкладки: вкладка властивостей обраного об’єкта (Properties) і вкладка подій (Events), що дозволяє програмі реагувати на будь-які дії користувача так, як це задано програмістом. Кожна з вкладок містить панель із двох стовпчиків. Вкладка Properties має у першому стовпчику назви властивостей, а в другому — поточні значення відповідних властивостей. У першому стовпчи­ку вкладки Events знаходиться назва події, а другому — функ­ція обробки цієї події.

Уся робота в середовищі С++ Builder здійснюється у вікнах, основним з яких є форма,і програмування ґрунтується на взаємодії двох процесів:

  • конструювання форми, тобто розміщення на ній необ­хідних елементів (компонентів) керування розв’язанням задачі;
  • написання програмного коду, який забезпечує функціо­нування цих компонентів.

Згідно з термінологіїєю С++ Builder весь комплекс про­грам, який створюється при розв’язанні конкретної задачі, є проектом.

Проект — це основна програма, котра цілком створюєть­ся системою і записується у файл з розширенням .dpr. Вона містить інструкції, з яких починається виконання додатка, а та­кож відповідає за проведення процесу компіляції і компонуван­ня. В проекті не рекомендується робити будь-які зміни. Програма складається з одного чи більше модулів з розширенням .срр, які містять програмні коди. Крім того, для кожного додатка автоматично створюється ще один файл, що називається заго­ловним або інтерфейсним і має розширення .h. Для кожного програмного додатка система створює мінімально необхідну про­граму, тобто пропонує заготовку для написання програмного коду, а користувач повинен записати в цю заготовку свої інструк­ції, котрі реалізують роботу заданого алгоритму. Враховуючи вище сказане, доцільно зробити висновок, що С++Builder асо­ціює з кожним додатком три вихідних файли з такими іменами за замовчуванням:

  • файл реалізації Unit1.cpp — зберігає програмний код до­датка. Саме в ньому записуються оброблювачі подій, які відповідають за реакцію програми при впливі користувача на об’єк­ти компонентів;
  • заголовний файл Unit1.h — містить список всіх об’єктів і їхніх конструкторів;
  • файл Project1.cpp — обслуговує всі об’єкти, що укладені в додатку. Будь-яка нова форма, програмний модуль чи модуль даних автоматично включаються в проектний файл. Зміст вихід­ного тексту проектного файла можна переглянути у вікні редак­тора коду за допомогою команди головного меню View | Project Source або вибравши одноіменну опцію з контекстного меню ад­міністратора проекту.

Для створення додатка треба спочатку на формі розміс­тити компоненти, що забезпечують введення вихідних даних, їхню обробку і виведення отриманого результату,а потім у вік­ні програмного коду записати оператори мови С++, які забез­печують функціонування цих компонентів.

У вікні форми слід розмістити компоненти, необхідні для керування роботою додатка. Для цього треба спочатку клацнути лівою клавішею мишки на обраному з палітри компоненті, по­тім перевести покажчик мишки в намічене місце форми і клац­нути ще раз. Після розміщення компонент можна переміщати у вікні форми, змінювати розміри і коригувати напис. Для цьо­го достатньо зробити компонент активним, тобто клацнути миш­кою у вікні Object Inspector, у полі Properties знайти влас­тивість Caption чи Text і залежно від виду компонента замінити текст на потрібний або видалити його зовсім за допомогою кла­віші Backspace («забою»).

Для створення форми у вікні коду додатка буде автоматич­но створена заготовка програмного коду, що має вигляд:

#include <vcl.h>

//здесь можно добавлять заголовочные файлы

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfn"

TForm1 *Form1;

// здесь можно описывать глобальные переменные

__ fastcall TForm1::TForm1 (TComponent* Owner)

: TForm(Owner)

{

//здесь можно записывать свой конструктор формы

}

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

На цій заготовці ще не відведено місця для операторів про­грами. Воно буде створене при розміщенні на формі компонен­та, який породжує подію.

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

Розв’язання практично будь-якої задачі потребує введення вихідних даних у пам’ять комп’ютера і виведення отриманих результатів. Для цього можна застосовувати як компоненти з С++ Builder, так і функції системи WINDOWS.

Введення даних найчастіше здійснюється з використанням компонентів: Edit(однорядковий редактор) та Меmо (багато­рядковий редактор), що розташовані на сторінціStandard па­літри, а також таблиці StringGrid, яка знаходиться на сторінці Additional.Крім того, для введення іноді зручно використову­вати функцію InputBox().

Виведення повідомлень про результати роботи програми мож­на реалізувати з застосуванням популярних компонентів Label, Edit, Memo, StringGrid і функціїShowMessage(), MessageDlg(). Компонент Label часто використовується також для пояснень, підказок тощо. Взагалі система С++ Builder налічує багато різ­них компонентів, за допомогою яких можна здійснювати вве­дення і виведення даних.

Перейдемо до практичного знайомства з компонентами.

Приклад 12.1. Обчислити значення функції у = ах2 – sinx, якщо хє є [-1; 2]; hx = 0,5 при довільному значенні змінної а.

Алгоритм та програмну реалізацію на С++ розв’язання подібної задачі розглянуто раніше (див. приклад 1.1 і при­клад 5.1 частини І).

Робота починається з активізації системи C++Builder. Потім за необхідності можна змінити заголовок вікна форми Forml на більш змістовний, наприклад, «Задача №1». Для цього слід форму зробити активною, клацнувши на будь-якому її місці мишкою, і у вікніObject Inspector у властивості Caption слово Forml замінити на запис «Задача №1».

Для введення значень змінної а на формі розмістимо ком­понент Edit з написом Edit1 за раніше описаною методикою. Для того, щоб поле введення було чистим перед розміщенням на ньому потрібного значення, у вікні Object Inspector у влас­тивості Text видалимо написEdit1. При цьому поле введення компоненти стане порожнім.

Ліворуч від компонента Edit аналогічним чином розмісти­мо компонент Label, а у вікні інспектора об’єктів у властивості Caption запишемо «Введите а».

Виведення одержаних результатів розв’язання наведеної зада­чі розмістимо нижче у компоненті Edit1 і надамо йому назву — «РЕЗУЛЬТАТ», для чого розмістимо в цьому місці ще один компонент Label2 і в її полі Caption запишемо «РЕЗУЛЬТАТ».

Для виведення значень одержаного результату розмістимо під словом «РЕЗУЛЬТАТ»наступний компонент Label3 (номе­ри компонентам присвоюються автоматично) і очистимо її по­ле Caption. Можна підкреслити, що при очищенні цього по­ля розміри компонента змінюються. Це відбувається тому, що в полі Size компонента у вікні інспектора об’єктів встановле­на опція AutoSize, яка приводить до автоматичної зміни роз­мірів вікна при розміщенні в ньому інформації. Таким чином, на формі розміщено компоненти, необхідні для введення-виведення даних.

Для використання необхідних обчислень на формі розташо­вано командний компонентButton1, при клацанні на якому буде виконуватися програма обчислення функції. Ценазива­ється подією. У властивості Caption цього компонента розміс­тимо слово«Вычислить», яке стане назвою кнопки.

Для закінчення роботи над додатком на формі розмістимо ще один компонент Button2і за вищевказаною методикою на­дамо їй назву «Конец работы». На цьому процес формування вікна форми закінчено.

Наступний етап — написання програми, яка забезпечує функціонування розміщених компонентів.

Якщо двічі клацнути на кнопці «Вычислить», на екрані з’явиться вікно коду додатка, причому на передньому плані бу­де заготовка для розміщення програми обробки цієї події, що має вигляд:

//——————————————————

void_ fastcall TForm “Button1 Click(TObject *Sender)

{

/* здесь следует записывать операторы программы обработчика событий */

}

Це і є функція мови С++, у фігурних дужках якої запису­ються оператори програми.

Слід зауважити, що в полях введення і виведення, роз­міщених на формі компонентів, записується інформація, яка представлена у вигляді тексту, тобто дані рядкового типу. Як­що ця інформація — числа, то перш ніж їх обробляти, треба рядкове подання перетворити на числове, а при виведенні не­обхідно зробити зворотне перетворення. Для цього рекоменду­ється використовувати такі функції:

  • StrToInt(St) — перетворює рядкове дане St у число цілого типу;
  • IntToStr(x) — перетворює число цілого типу в його ряд­кове подання;
  • StrToFloat(St) — перетворює рядкове дане в число дійс­ного типу;
  • FloatToStr(x) — перетворює дійсне число в його рядкове подання;
  • FIoatToStrF(x, формат,w,d) — форматне перетворення дійсного числа х у рядок символів згідно з форматом.

Тут слово формат — позначення способу перетворення, що може мати такі значення:

  • ffFixed — виведення числа в природній формі (з фіксо­ваною крапкою);
  • ffExponent — виведення числа в показниковій формі (з плаваючою крапкою);
  • ffGeneral — перетворює дійсне число в його рядкове по­дання як у природній, так і в показниковій формі залежно від його значення.

Параметри w і d вказують кількість позицій, що відводять­ся під запис числа: w —загальна кількість розрядів, d — кіль­кість розрядів у дробовій частині числа.

Тепер почнемо формувати програмний код додатка. При­клад, що розв’язується, містить обчислювання тригонометрич­ної та алгебраїчної функції, тому на початку коду слід записати заголовний файл math.h.

У програмі оброблювача спочатку необхідно описати змінні, які використовуються —а, х, у. Потім змінній а слід присвоїти значення вікна введення Edit1->Text, це значення буде виведено У вікні Label3->Caption. Далі організуємо цикл для обчислення заданої функції для різних значень простої змінної х і виведен­ня результату в те ж саме вікно. Якщо потрібне повторення об­числень, то наприкінці оброблювача слід записати оператори:

  • Edit1 -> Text=” “; — очищення поля введення;
  • Edit1 -> SetFocus(); — передача фокуса компоненту Edit1, тобто підготовка його до прийому нового числа. Взагалі ці опе­ратори у даному прикладі не обов’язкові.

Для створення оброблювача події, що має назву «Конец ра­боты», треба двічі клацнути мишкою на відповідній компоненті у вікні форми і у запропонованій заготівці програми записати один оператор Close();.

Готовий додаток перед запуском на виконання треба записати на диск. Оскільки для кожного додатка система створює не один, а декілька файлів, то записувати його рекомендується в окремій папці. Для цього треба в меню File виконати коман­ду SaveProject As, у вікні, що з’явилося, знайти раніше підго­товлену папку чи створити нову, а потім її відкрити. При цьому в заголовку вікна буде напис «Save Unit As», тобто система за­пропонує записати спочатку програмний файл. Внизу віконця в рядку «Имя файла»треба ввести ім’я програмного модуля, ви­користовуючи латинський алфавіт, наприкладZadacha_l.cpp, і натиснути кнопку «Сохранить».

Після цього у заголовку віконця з’явиться напис «Save Project As». У пункті «Имяфайла» треба ввести ім’я файла проекту і також виконати команду «Сохранить».

Далі можна запускати додаток на виконання. Для цього до­сить клацнути на позначці в командному рядку панелі керуван­ня, яка має вигляд трикутника, або натиснути клавішуF9, або виконати команду Run з головного меню Run. У вікні форми, що з’явилася, у полі введення треба ввести значення змінної а і клацнути мишкою на кнопці «Вычислить».Тоді у вікні Label3 з’явиться результат розв’язання задачі.

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

#include <vcl.h>

#include <math.h>

#pragma hdrstop

#include "Zadacha 1.h"

//--------------------------------------------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//--------------------------------------------------------------------------------------------------------------

fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------------------------------------------------------

void_ fastcall TForm1::Button1Click(TObject *Sender)

{

float a, x, y;

a = StrToFloat(Edit1->Teхt); // передается значение переменной a

// вывод a

Label3->Caption ="При a="+FloatToStrF(a, ffGeneral, 4, l)+"\n\n";

for (x =-1; x <= 2; x += 0.5)

{ у = a*pow(x,2) - sin(x);

// вычисление функции // вывод результата

Label3->Caption = Label3->Caption + "x="+ FloatToStrF(x, ffGeneral,4,1) +" y="+ FloatToStrF(y, ffGeneral, 6,3) + '\n';

}

Edit1->Text = "";

Edit1->SetFocus();

}

//------------------------------------------------------------------------------------

void_ fastcall TForm1::Button2CIick(TObject "Sender)

{ Close();

}

Для закінчення роботи з додатком досить клацнути миш­кою на кнопці «Конец работы».

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

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