Програмування на мові Delphi. Глава 7. Проект програми
попередня стаття серії
Яке вирішується на комп'ютері завдання реалізується у вигляді прикладної програми, яку для стислості називають додатком. В основі розробки програми в середовищі Delphi лежить проект. Центральною частиною проекту є форма, на яку поміщаються необхідні для вирішення конкретної задачі компоненти. У такій послідовності – проект – форми – компоненти – ми і розглянемо процес створення додатку в середовищі Delphi. Під час викладу матеріалу ми будемо часто звертатися до прикладу з обчисленням ідеального ваги, який був розглянутий в першому розділі. Якщо ви його забули, перечитайте перший розділ ще раз.
7.1. Проект
7.1.1. Поняття проекту
Додаток збирається з багатьох елементів: форм, програмних модулів, зовнішніх бібліотек, картинок, піктограм та ін Кожен елемент розміщується в окремому файлі і має строго певне призначення. Набір всіх файлів, необхідних для створення додатку, називається проектом. Компілятор послідовно обробляє файли проекту і будує з них виконуваний файл. Основні файли проекту можна розділити на кілька типів:
- Файли опису форм – текстові файли з розширенням DFM, описують форми з компонентами. У цих файлах запам'ятовуються початкові значення властивостей, встановлені вами у вікні властивостей.
- Файли програмних модулів – текстові файли з розширенням PAS, що містять вихідні програмні коди на мові Delphi. У цих файлах ви пишіть методи обробки подій, що генеруються формами і компонентами.
- Головний файл проекту – текстовий файл з розширенням DPR, що містить головний програмний блок. Файл проекту підключає всі використовувані програмні модулі і містить оператори для запуску програми. Цей файл середовище Delphi створює і контролює сама.
На підставі сказаного можна зобразити процес створення додатку в середовищі Delphi від постановки завдання до отримання готового виконуваного файлу (рисунок 7.1):
Малюнок 7.1. Процес створення додатку в середовищі Delphi
Давайте розглянемо призначення і внутрішній устрій файлів проекту. Це допоможе вам легше орієнтуватися у проекті.
7.1.2. Файли опису форм
Пам'ятаєте, з чого ви починали знайомство із середовищем Delphi? Звичайно, з форми. Отже, перша складова частина проекту – це текстовий файл з розширенням DFM, що описує форму. У DFM-файлі зберігаються значення властивостей форми та її компонентів, встановлені вами у вікні властивостей під час проектування програми. Кількість DFM-файлів дорівнює кількості використовуваних у додатку форм. Наприклад, у нашому прикладі про ідеальному вазі використовується тільки одна форма, тому й DFM-файл лише один – Unit1.DFM.
Якщо ви бажаєте поглянути на вміст DFM-файлу, викличте у форми контекстне меню клацанням правої кнопки миші і виберіть команду View as Text (Рисунок 7.2).
Малюнок 7.2. Перехід до текстового поданням форми за допомогою команди View as Text контекстного меню
У відповідь середовище Delphi замість графічного зображення форми покаже наступний текст у редакторі коду:
object Form1: TForm1 |
Незважаючи на настільки довгий текст опису, розібратися в ньому зовсім не складно. Тут на спеціальній мові задаються початкові значення для властивостей форми Form1 та її компонентів Button1, Button2, Edit1, Edit2, Label1, Label2. Більшого знати не потрібно, оскільки ви завжди будете використовувати візуальні засоби проектування і працювати з графічним поданням форми, а не з текстовим описом. Раз так, давайте звернімося повернутися до графічного поданням, не вносячи в текст ніяких змін. Для цього викличте контекстне меню редактора коду і виберіть команду View as Form (Рисунок 7.3).
Малюнок 7.3. Перехід до графічного поданням форми за допомогою команди View as Form контекстного меню
На екрані знову з'явиться графічний образ форми. Якщо ви все-таки внесли зміни в текст, то вони відіб'ються на зовнішньому вигляді форми.
Файл опису форми (DFM-файл) потрібен лише на етапі проектування. При складанні програми опис форми з DFM-файлу поміщається в спеціальну область даних виконуваного файлу (область ресурсів). Коли під час роботи програми відбувається створення форми, її опис витягується з області ресурсів і використовується для ініціалізації форми та її компонентів. У результаті форма відображається на екрані так, як ви задали при проектуванні.
7.1.3. Файли програмних модулів
Кожній формі в проекті відповідає свій програмний модуль (unit), що містить всі пов'язані з формою оголошення і методи обробки подій, написані на мові Delphi. Програмні модулі розміщуються в окремих файлах з розширенням PAS. Їх кількість може перевищувати кількість форм. Чому? Тому, що в ряді випадків програмні модулі можуть і не ставитися до форм, а утримувати допоміжні процедури, функції, класи та ін. Наше завдання про ідеальний вазі дуже проста, тому в ній є лише один програмний модуль, пов'язаний з формою. Не полінуйтеся вивчити його уважно:
unit Unit1; |
Дамо необхідні коментарі до тексту програмного модуля. На самому початку після ключового слова unit записується ім'я модуля
unit Unit1; |
Ні в якому разі не змінюйте це ім'я вручну. Середовище Delphi вимагає, щоб ім'я модуля збігалося з ім'ям файлу, тому якщо ви хочете перейменувати модуль, збережіть його у файлі з новим ім'ям, скориставшись командою меню File / Save As…. Середовище Delphi сама підставить після слова unit нове ім'я. Після цього видаліть старий модуль.
Зміст інтерфейсної секції модуля (interface) Починається з підключення стандартних модулів бібліотеки VCL, в яких визначено часто викликаються підпрограми і класи поміщених на форму компонентів.
uses |
Середовище Delphi формує список модулів без вашої участі і автоматично поповнює його, коли ви додаєте на форму нові компоненти. Тим не менш, список підключених модулів можна змінювати прямо в редакторі коду (вручну).
Дивимося далі. У розділі опису типів (type) Оголошено клас форми. За замовчуванням він називається TForm1 і породжений від стандартного класу TForm.
type |
Розміщені на форму компоненти представлені полями форми. У нас на формі шість компонентів, тому і полів в описі класу теж шість. Імена полів збігаються з іменами компонентів, заданими у вікні властивостей.
Після полів слідують заголовки методів обробки подій. Назва кожного такого методу середовище Delphi формує автоматично на підставі імені компоненту та імені генерованої ним події. Наприклад, для кнопки Button1 метод обробки події OnClick називається Button1Click.
Зверніть увагу, що поля, які мають компоненти форми, а також методи обробки подій отримують атрибут видимості published (Він приймається за замовчуванням для всіх спадкоємців TForm). Завдяки цьому ви можете працювати з ними на візуальному рівні, наприклад, бачити їх імена у вікні властивостей. Оскільки середовище Delphi сама управляє вмістом секції published, Ніколи не змінюйте цю секцію вручну (у редакторі коду), користуйтеся візуальними інструментами: палітрою компонентів і вікном властивостей. Запам'ятайте:
- коли ви ставите на форму компоненти, середовище Delphi сама додає відповідні поля в опис класу форми, а коли ви видаляєте компоненти з форми, середа видаляє поля з опису класу;
- коли ви визначаєте у формі або компонентах обробники подій, середовище Delphi сама визначає в класі відповідні методи, а коли ви видаляєте весь код з методів обробки подій, середовище Delphi видаляє і самі методи.
Для вашої зручності в класі форми заздалегідь оголошені порожні секції private і public, В яких ви можете розміщувати будь-які допоміжні поля, методи і властивості. Середовище Delphi їх "в упор не бачить", тому з ними можна працювати тільки на рівні програмного коду. Ви можете поміщати в секцію private атрибути, які потрібні тільки самій формі, а в секцію public – Атрибути, які потрібні ще й іншим формам і модулів.
Після опису класу йде оголошення власне об'єкту форми:
var |
Мінлива Form1 – Це посилання на об'єкт класу TForm1, Конструювання якого виконується у головному файлі проекту – DPR-файлі (див. далі).
На цьому зміст інтерфейсної секції модуля закінчується і починається розділ реалізації (implementation). Спочатку в ньому підключається файл опису форми:
{$R *.dfm} |
Будь ласка, не подумайте, що ця директива підключає всі файли з розширенням DFM. Підключається лише один DFM-файл, у якому описана форма даного модуля. Ім'я DFM-файлу виходить заміною зірочки на ім'я модуля, в якому записана директива.
Далі слід реалізація методів обробки подій. Порожні заготовки для них середовище Delphi створює сама одночасно з додаванням заголовків у клас форми. Ви ж наповнюєте їх змістом.
procedure TForm1.Button1Click(Sender: TObject); |
Увага! Якщо ви хочете видалити метод обробки події та прибрати посилання на нього, просто зробіть метод порожнім – видаліть весь написаний вами код, включаючи коментарі, і оголошення локальних змінних. При збереженні або компіляції проекту середовище Delphi сама викине з тексту порожні методи.
При уважному вивченні вихідного тексту модуля залишається нез'ясованим одне питання: як забезпечується виклик методів Button1Click і Button2Click при натисканні на формі кнопок, адже в тексті модуля відсутній навіть натяк на це. Все дуже просто. Загляньте в DFM-файл. Крім установки значень властивостей ви знайдете установку і обробників подій.
object Button1: TButton |
Завдяки цьому опису забезпечується прив'язка методів форми до відповідних подій. До речі, сенс наведеного фрагменту опису стає більш прозорим, якщо згадати, що події в мові Delphi – це насправді властивості, але їх значеннями є покажчики на методи. Таким чином, установка подій мало чим відрізняється від установки властивостей форми, адже за природою це одне і те ж.
Ми достатньо глибоко занурилися у внутрішній устрій файлів опису форм і файлів програмних модулів і, зізнаємося, зробили це навмисно, щоб дати вам повне розуміння питання, не змушуючи приймати на віру далеко неочевидні речі. А зараз пора піднятися на рівень проекту і подивитися, що ж об'єднує всі ці файли.
7.1.4. Головний файл проекту
Для того щоб компілятор знав, які конкретно файли входять до проекту, необхідно якийсь організуючий початок. І воно дійсно є. Це так званий файл проекту, що має розширення DPR (скор. від Delphi Project). Він являє собою головний програмний файл на мові Delphi, який підключає за допомогою оператора uses всі файли модулів, що входять в проект. Для кожного проекту існує тільки один DPR-файл.
Коли ви по команді File / New / Application починаєте розробку нової програми, середовище Delphi автоматично створює файл проекту. У міру створення нових форм вміст цього файлу видозмінюється автоматично. Коли ви закінчите роботу і будете готові компілювати проект, в DPR-файлі буде знаходитися перелік програмних модулів, які будуть подані на вхід компілятору. Щоб побачити вміст DPR-файлу нашого застосування, що обчислює ідеальний вага, виберіть у меню середовища Delphi команду Project / View Source. У редакторі коду з'явиться нова сторінка з наступним текстом:
program Project1; |
Трохи прокоментуємо цей текст. Підключення модуля Forms обов'язково для всіх програм, тому що в ньому міститься визначення об'єкта Application. Цей об'єкт лежить в основі будь-якого графічного додатку і доступний протягом всієї його роботи.
Підключається слідом модуль Unit1 містить визначення форми. Назва форми наводиться у фігурних дужках. Директива in вказує на те, що модуль є необхідною частиною проекту і існує у вигляді вихідного тексту на мові Delphi.
Директива {$ R *. res} підключає до результуючою виконуваному файлу так звані ресурси, в даному випадку значок програми. Цей значок буде видно на панелі задач.
Далі випливає головний програмний блок, що містить виклики трьох методів об'єкту Application. Виклик методу Initialize готує додаток до роботи, метод CreateForm завантажує і ініціалізує форму Form1, А метод Run активізує форму і починає виконання програми. Фактично час роботи методу Run – Це час роботи програми. Вихід з методу Run відбувається тоді, коли користувач закриває головну форму додатку; в результаті завершенні програм.
Увага! Ніколи не змінюйте DPR-файл вручну. Залиште цю роботу для середовища Delphi. Додавання та видалення модулів, а також управління створенням форм здійснюється за допомогою команд і діалогових вікон середовища.
7.1.5. Інші файли проекту
Вище ми розглянули основні файли проекту. Крім них існує ряд додаткових файлів:
- Файл з розширенням DOF (скор. від Delphi Options File), де зберігаються задані програмістом параметри компіляції і збірки проекту;
- Файл з розширенням DSK (скор. від англ. Desktop), де зберігаються налаштування середовища Delphi для даного проекту. Щоб середовище Delphi зберігала свої налаштування в DSK-файлі, виберіть у меню команду Tools / Environment Options… і в діалоговому вікні Environment Options на вкладці Preferences в групі Autosave options відзначте пункт Project Desktop.
- Файл з розширенням CFG (скор. від англ. Configuration), де зберігаються налаштування для консольного варіанту компілятора.
- Файл з розширенням DCI (скор. від англ. Delphi CodeInsight), де середовище Delphi зберігає зроблені вами настройки для програмного "суфлера" (CodeInsight).
- Файл з розширенням DCT (скор. від англ. Delphi Component Templates), де зберігаються ваші домашні заготівлі компонентів.
- Файл з розширенням DMT (скор. від англ. Delphi Menu Templates), де зберігаються ваші домашні заготовки меню.
- Файл з розширенням DRO, де зберігаються настройки і ваші добавки до сховища компонентів.
- Файл з розширенням TODO – записна книжка для зберігання завдань на програмування і коротких приміток.
- Файл з розширенням DDP (скор. від англ. Delphi Diagram Portfolio), де зберігаються графічні схеми, наочно пояснюють взаємозв'язку між компонентами.
- Файл ресурсів з розширенням RES (скор. від RESource). У ньому, наприклад, зберігається значок програми, що відображається на панелі задач. Про те, як задати значок програми, ми розповімо під час обговорення питань управління проектом.
До проекту можуть входити також логічно автономні елементи: точкові малюнки (BMP-файли), значки (ICO-файли), файли довідки (HLP-файли) і т.п., проте ними керує сам програміст.
Тепер можна уточнити малюнок, що відображає склад проекту (рисунок 7.4):
Малюнок 7.4.Состав проекту в середовищі Delphi
Отже, склад проекту зрозумілий. Потрібно тепер з'ясувати, як ним керувати – створювати і зберігати проект, додавати і видаляти модулі, встановлювати параметри компіляції, збирати і запускати додаток. Цим зараз і займемося.
7.2. Управління проектом
7.2.1. Створення, збереження і відкриття проекту
При запуску середовища Delphiавтоматіческі створюється новий проект. Це зроблено для вашої зручності. Якщо вам буде потрібно створити новий проект, не перевантажуючи середу Delphi, просто виконайте команду меню File / New / Application. У результаті старий проект буде закрито, а замість нього створено новий. У новий проект середовище Delphi завжди поміщає чисту форму.
У процесі розробки програми ви додаєте на форму компоненти, пишіть обробники подій, додаєте в проект дочірні форми, в загальному, проектуєте додаток. Коли щось вже зроблено, має сенс зберегти проект. Для цього виконайте команду головного меню File / Save All. Середа запросить спочатку ім'я для програмного модуля з формою, а потім ім'я для проекту (до речі, ви вже зберігали файл в першому розділі). Якщо файл з введеним ім'ям вже є на диску, середовище Delphi повідомить вам про це і запитує підтвердження на перезапис існуючого файлу або запис під іншим ім'ям.
Якщо раптом буде потрібно замінити ім'я проекту іншим ім'ям, скористайтеся командою меню File / Save Project As… . Якщо ж потрібно замінити ім'я модуля, скористайтеся командою File / Save As… . Операції ці елементарні й не вимагають подальших пояснень.
Для відкриття в середовищі Delphi раніше збереженого на диску проекту достатньо виконати команду головного меню File / Open… . На екрані з'явиться вікно діалогу (рисунок 7.5), де ви повинні вказати або вибрати з поданого списку каталог та ім'я завантажуваного проекту.
Малюнок 7.5. Вікно вибору проекту
З відкритим проектом можна продовжити роботу: виправити, компілювати, виконати, і не забути зберегти.
7.2.2. Вікно управління проектом
При створенні більш-менш складного додатка програміст завжди повинен знати, на якій стадії розробки він знаходиться, мати уявлення про склад проекту, вміти швидко активізувати потрібний файл, додати в проект який-небудь новий файл або видалити непотрібний, встановити параметри компіляції, і т.д. Для цього в середовищі Delphi є вікно управління проектом – вікно Project Manager. Фактично це візуальний інструмент для редагування головного файлу проекту. Вікно управління проектом викликається з головного меню командою View / Project Manager. Після вибору цієї команди на екрані з'явиться вікно, в якому проект представлений у вигляді дерева (малюнок 7.6).
Малюнок 7.6. Вікно управління проектом
Виділений жирним шрифтом елемент Project1 – це наш проект. Його ім'я збігається з ім'ям виконуваного файлу, який виходить в результаті компіляції і збірки всіх модулів проекту. Список модулів відображається у вигляді підлеглих елементів. Якщо елемент є формою, то він у свою чергу сам складається з двох підлеглих елементів: програмного модуля форми (PAS-файл) і описи форми (DFM-файл).
Управління проектом виконується за допомогою контекстного меню, яке викликається клацанням правої кнопки миші по елементу Project1 (рисунок 7.7).
Малюнок 7.7. Контекстне меню проекту
Призначення команд контекстного меню коротко описано в наступній таблиці:
Команда | Опис |
---|---|
Add… | Додає існуючий файл (модуль) в проект. |
Remove File… | Видаляє файл (модуль) з проекту. |
Save | Зберігає проект на диск. |
Options… | Викликає діалогове вікно налаштування проекту (Project Options). |
Activate | Робить проект активним (при роботі з групою проектів, див. пункт 7.2.3). |
Close | Закриває проект. |
Remove Project | Видаляє проект з групи (див. пункт 7.2.3). |
Build Sooner | Переміщує проект вгору за списком, який визначає черговість збірки проектів. Використовується при роботі з групою проектів (див. пункт 7.2.3). |
Build Later | Переміщує проект вниз за списком, який визначає черговість збірки проектів. Використовується при роботі з групою проектів (див. пункт 7.2.3). |
Compile All From Here | Компілює змінені проекти по порядку, починаючи з виділеного проекту. Використовується при роботі з групою проектів (див. пункт 7.2.3). |
Build All From Here | Компілює всі проекти по порядку, починаючи з виділеного проекту. Використовується при роботі з групою проектів (див. пункт 7.2.3). |
Управління окремим модулем виконується за допомогою контекстного меню, яке викликається клацанням правої кнопки миші по відповідному елементу, наприклад Unit1 (рисунок 7.8).
Малюнок 7.8. Контекстне меню модуля у вікні управління проектом
Призначення основних команд контекстного меню коротко описано в наступній таблиці:
Команда | Опис |
---|---|
Open | Відкриває модуль. Якщо модуль містить форму, то на екрані з'являється її графічне представлення. Інакше, на екрані з'являється редактор коду з вихідним текстом програмного модуля. |
Remove From Project | Видаляє модуль з проекту. |
Save | Зберігає модуль на диск. |
Save As… | Зберігає модуль з новим ім'ям. |
Тепер ви завжди зможете дізнатися, з яких файлів складається той чи інший проект, а керування ним не складе для вас ніяких труднощів.
7.2.3. Групи проектів
На практиці кілька проектів можуть бути логічно пов'язані між собою, наприклад проект динамічно підключається бібліотеки пов'язаний з проектом програми, у якому використовується ця бібліотека. Середовище Delphi дозволяє об'єднати такі проекти в групу. Саме для цього у вікні управління проектом є кореневий елемент ProjectGroup1, підлеглими елементами якого і є логічно пов'язані проекти. Порядок елементів визначає черговість збірки проектів. Змінити порядок можна за допомогою команд Build Sooner і Build Later, Які знаходяться в контекстному меню, що викликається клацанням правої кнопки миші по відповідним проектом (рисунок 7.7).
На даний момент в групі існує тільки один проект – Project1. Щоб додати інших проектів у групу скористайтеся контекстним меню, яке викликається клацанням правої кнопки миші по елементу ProjectGroup1 (Рисунок 7.9).
Малюнок 7.9. Контекстне меню групи проектів
Призначення команд контекстного меню коротко описано в наступній таблиці:
Команда | Опис |
---|---|
Add New Project… | Створює новий проект і додає його в групу. |
Add Existing Project… | Додає існуючий проект у групу. |
Save Project Group | Зберігає файл, що описує групу проектів. |
Save Project Group As… | Зберігає опис групи проектів у файлі з іншим ім'ям. |
View Project Group source | Показує текстовий файл, що описує групу проектів. |
Коли до групи об'єднані кілька проектів, середовище Delphi створює спеціальний текстовий файл з описом цієї групи. Файл має розширення BPG (від англ. Borland Project Group), а його ім'я запитується у користувача. Для груп, що складаються з одного єдиного проекту BPG-файл не створюється.
7.2.4. Налаштування параметрів проекту
Проект має багато різних параметрів, за допомогою яких ви керуєте процесом компіляції і збірки додатку. Встановити параметри проекту можна у вікні Project Options. Для цього виберіть в головному меню команду Project / Options… або у вікні управління проектом викличте контекстне меню елемента Project1 і виберіть команду Options…. На екрані з'явиться діалогове вікно; вам залишиться лише встановити в ньому потрібні значення параметрів.
Діалогове вікно параметрів проекту складається з декількох вкладок. Параметрів дуже багато, тому ми розглянемо тільки ті, які використовуються найбільш часто.
На вкладці Forms (Рисунок 7.10) можна задати головну форму додатку (Main form) І в списку Auto-create forms вказати форми, які будуть створюватися одночасно з головною формою.
Малюнок 7.10. Вікно параметрів проекту. Вкладка Forms
На вкладці Application (Рисунок 7.11) можна задати назву (Title) Вашої програми. У середовищі Delphi додатково можна задати файл довідки (Help file) І значок (Icon).
Малюнок 7.11. Вкладка Application у вікні параметрів проекту
На вкладці Compiler (Рисунок 7.12) настроюються параметри компілятора. Найбільш цікавими з них є перемикачі Optimization (Включає оптимізацію генерованого коду) і Use Debug DCUs (Дозволяє налагоджувати вихідний код системних бібліотек). Обидва цих перемикача корисні при налагодженні програми: перший слід вимкнути, а другий – включити.
Малюнок 7.12. Вкладка Compiler у вікні параметрів проекту
На вкладці Compiler Messages (Рисунок 7.13) налаштовується чутливість компілятора до підозрілого коду. Включивши перемикачі Show hints і Show warnings, Ви будете отримувати від компілятора вельми корисні підказки (hints) і попередження (warnings), а не тільки повідомлення про помилки.
Малюнок 7.13. Вкладка Compiler Messages у вікні параметрів проекту
На вкладці Linker (Рисунок 7.14) настроюються параметри збірки проекту. Володарям середовища Delphi слід звернути увагу на групу Memory sizes, Особливо на два параметри: Min stack size і Max stack size. Вони задають відповідно мінімальний і максимальний розміри стека прикладної програми. Вам може знадобитися збільшити значення цих параметрів при написанні програми, активно використовує рекурсивні підпрограми.
Малюнок 7.14. Вкладка Linker у вікні параметрів проекту
На вкладці Directories/Conditionals (Рисунок 7.15) можна задати каталоги для різних файлів. Найбільш важливі з них: Output directory – Каталог, в який поміщається виконуваний файл; Unit output directory – Каталог, в який поміщаються проміжні об'єктні модулі (DCU-файли); Search path – Список каталогів, в яких здійснюється пошук програмних модулів.
Малюнок 7.15. Вкладка Directories / Conditionals у вікні параметрів проекту
На вкладці Version Info (Рисунок 7.16) виводиться інформація про версію програми. Для того щоб ця інформація містилася в виконуваний файл, потрібно включити перемикач Include version information in project. Номер версії задається у вигляді чотирьох чисел: Major version – Старший номер версії програми (його зазвичай збільшують при внесенні в програму концептуально нових можливостей); Minor version – Молодший номер версії програми (його зазвичай збільшують при незначному розширенні функціональних можливостей програми); Release – Номер випуску програми, яка отлажна і придатна до використання замовником; Build – Порядковий номер збірки проекту (він автоматично збільшується на одиницю при компіляції проекту, якщо включений перемикач Auto-increment build number). Всі ці параметри несуть лише інформативний характер і не впливають на роботу самої програми. Проте, інформація про версії може використовуватися спеціальними програмами установки для користувача програм для контролю за тим, щоб більш нові версії бібліотек не замінювалися старими.
Малюнок 7.16. Вкладка Version Info у вікні параметрів проекту
На вкладці Packages (Рисунок 7.17) ви можете керувати списком пакетів, які у вашому проекті. Пакети – це зовнішні бібліотеки компонентів, вони розглянуті в главі 13. Зверніть увагу на перемикач Build with runtime packages, Який дозволяє істотно зменшити розмір виконуваного файлу за рахунок використання зовнішніх бібліотек компонентів замість вбудовування їх коду безпосередньо в виконуваний файл. Цей режим вигідний при створенні декількох програм, побудованих на базі великої кількості загальних компонентів.
Малюнок 7.17. Вкладка Packages у вікні параметрів проекту
Коли всі параметри проекту встановлені, можна приступати до його компіляції.
7.2.5. Компіляція та збирання проекту
Компіляція та збирання проекту можуть виконуватися на будь-якій стадії розробки проекту. Під компіляцією розуміється отримання об'єктних модулів (DCU-файлів) з вихідних текстів програмних модулів (PAS-файлів). Під складанням розуміється отримання виконуваного файлу з об'єктних модулів. У середовищі Delphi компіляція та збирання проекту суміщені.
Для виконання компіляції досить виконати команду меню Project / Compile <Назва проекту> або натиснути комбінацію клавіш Ctrl + F9. При цьому компілюються всі вихідні модулі, вміст яких змінювалося після останньої компіляції. У результаті для кожного програмного модуля створюється файл з розширенням DCU (скор. від Delphi Compiled Unit). Потім середовище Delphi компілює головний файл проекту і збирає (іноді говорять компонує) з DCU-модулів виконуваний файл, ім'я якого збігається з ім'ям проекту. До уваги професіоналів зауважимо, що тямущий компілятор середовища Delphi викидає з виконуваного файлу весь невикористовуваний програмний код, тому не варто хвилюватися з приводу зайвих об'єктів і підпрограм, які можуть бути присутніми в підключених модулях.
Існує особливий вид компіляції і збірки – повна примусова компіляція всіх програмних модулів проекту, для яких доступні вихідні тексти, з наступною збіркою виконуваного файлу. При цьому не важливо, були включені до них зміни після попередньої компіляції чи ні. Повна компіляція проекту виконується за допомогою команди головного меню Project / Build <Назва проекту>. У результаті теж створюється виконуваний файл, але на це витрачатися трохи більше часу.
7.2.6. Запуск готового додатку
Коли після численних компіляцій ви виправите всі помилки і отримаєте-таки виконуваний файл, можна буде подивитися на результат вашого самовідданої праці. Для цього треба виконати створене додаток за допомогою команди меню Run / Run або клавіші F9. Перед виконанням буде автоматично повторений процес компіляції (якщо в проект вносилися зміни) і після його успішного завершення додаток запуститься на виконання. У результаті ви побачите на екрані його головну форму.
Ось власне і все, що ми хотіли розповісти вам про проект. У цілому ви уявляєте, що таке проект, і знаєте, як їм управляти. Пора зайнятися складовими частинами проекту і одночасно основними елементами будь-якої програми в середовищі Delphi – формами.
7.3. Форма
7.3.1. Поняття форми
З першого розділу ви вже маєте загальне уявлення про форму, тепер настав час вивчити її більш пильно. Фактично форма – це головний компонент програми, який, як і менш значні компоненти, має властивості. Найважливіші властивості форми: заголовок, висота, ширина, розташування, колір фону та інших При створенні нової форми середовище Delphi сама задає початкові значення властивостями форми, але ви можете змінити їх так, як вважаєте за потрібне. Це можна зробити під час проектування форми (у вікні властивостей) або під час виконання програми (за допомогою операторів мови Delphi).
Форма має дуже багато властивостей, і спочатку в них легко заплутатися. Практика показує, що плутанина виникає через алфавітного порядку властивостей у вікні Object Inspector: Близькі за змістом властивості виявляються розкиданими по осередках списку. Щоб у вас склалося уявлення про можливості форми, розглянемо основні властивості форми у порядку їхньої важливості. Для цього нам знадобиться новий додаток.
Виберіть у меню команду File / New / Application. Середовище Delphi автоматично створить у новому проекті чисту форму і помістить її вихідний текст в редактор коду (рисунок 7.18).
Малюнок 7.18. Форма на екрані і її опис в редакторі коду
Відразу збережіть проект і його форму, щоб дати їм осмислені імена. Виберіть у меню команду File / Save All і дайте модулю ім'я Main.pas, А проекту – ім'я FormTest.dpr. Полігон для вивчення форми підготовлений, можна зайнятися її властивостями.
7.3.2. Ім'я та заголовок форми
Головна властивість, з якого ви починаєте налаштування форми, – це властивість Name – Ім'я. Воно містить ідентифікатор, використовуваний для звернення до форми з програми (малюнок 7.19). Першою ж формі нового проекту автоматично призначається ім'я Form1. Ми радимо завжди його змінювати, щоб ім'я форми відображало її роль у додатку. Наприклад, головну форму додатку можна назвати MainForm (Якщо нічого краще в голову не приходить).
Малюнок 7.19. Програмний ідентифікатор форми
На майбутнє зауважимо, що властивість Name є в будь-якому компоненті, і воно редагується у вікні властивостей.
Кожна форма програми повинна мати зрозумілий заголовок, що говорить користувачеві про її призначення. Тема задається у властивості Caption. Наша форма – навчальна, тому ми дамо їй заголовок Main, Що говорить про те, що це просто головна форма (рисунок 7.20).
ПРИМІТКА Увага! Якщо вам раптом спала на думку ідея змінити шрифт, колір або висоту заголовка, то не шукайте для цього відповідних властивостей. Все це – параметри графічної оболонки операційної системи, і задаються вони в налаштуваннях цієї оболонки. |
7.3.3. Стиль форми
Налаштовуючи форму, потрібно приймати до уваги, який призначений для користувача інтерфейс буде мати ваше додаток: багатодокументний інтерфейс MDI (від англ. Multiple Document Interface) чи звичайний одно-документний інтерфейс SDI (від англ. Single Document Interface). За це відповідає властивість форми FormStyle, Що може приймати такі значення:
- fsMDIChild – дочірнє вікно MDI-додатки;
- fsMDIForm – головне вікно MDI-додатки;
- fsNormal – звичайне вікно (значення за умовчанням);
- fsStayOnTop – вікно, завжди розташоване поверх інших вікон на екрані.
Багато додатків, з якими ви працюєте, мають користувальницький інтерфейс MDI. Вони складаються з основного вікна, яке включає одне або декілька внутрішніх вікон. Внутрішні вікна обмежені областю основного вікна і не можуть виходити за його межі. Для головної форми, що відповідає основного вікна MDI-додатки, значення властивості FormStyle має дорівнювати fsMDIForm. Для всіх другорядних форм, що відповідають внутрішнім вікнам, значення властивості FormStyle одно fsMDIChild. Для вікон діалогу, що виконуються в монопольному режимі, властивість FormStyle дорівнює значенню fsNormal, що дає можливість виносити їх за межі основної форми.
Якщо програма має користувальницький інтерфейс SDI, то кожна форма існує у вигляді окремого незалежного вікна. Одне з вікон є головним, проте воно не містить інші вікна. У SDI-додатку значення властивості FormStyle одно fsNormal і для головної форми, і для другорядних форм. У деяких випадках допускається установка значення fsStayOnTop для того, щоб форма завжди відображалося поверх інших форм.
Очевидно, що наш простий обчислювач ідеального ваги є SDI-додатком і тому властивість FormStyle має значення за замовчуванням – fsNormal.
7.3.4. Розміри і місце розташування форми на екрані
Тепер визначимося з розмірами форми і її місцем розташування на екрані. Встановити розміри і положення форми простіше всього під час проектування за допомогою миші. Інший спосіб – звернутися до вікна властивостей і задати розміри форми з допомогою властивостей Width і Height, А місце розташування – за допомогою властивостей Left і Top (Значення задаються в пікселах). Сенс властивостей пояснює малюнок 7.21.
Малюнок 7.21. Розміри і місце розташування форми на екрані
Крім того, за допомогою властивості Position можна організувати автоматичне розміщення форми на екрані, вибравши одну з таких можливих значень:
- poDefault – розміри і положення форми підбираються автоматично виходячи з розмірів екрану.
- poDefaultPosOnly – положення форми підбирається автоматично, а ширина і висота визначаються значеннями властивостей Width і Height відповідно.
- poDefaultSizeOnly – розміри форми встановлюються автоматично, а місце розташування визначається значеннями властивостей Left і Top.
- poDesigned – розміри і положення форми визначаються значеннями властивостей Left, Top, Width, Height.
- poDesktopCenter – форма розміщується в центрі робочого столу (тобто екрану, з якого виключена панель завдань). Розміри форми визначаються значеннями властивостей Width і Height.
- poMainFormCenter – форма центрується щодо головної форми. Розміри форми визначаються значеннями властивостей Width і Height.
- poOwnerFormCenter – форма центрується щодо форми-власника. Розміри форми визначаються значеннями властивостей Width і Height.
- poScreenCenter – форма розміщується в центрі екрану. Розміри форми визначаються значеннями властивостей Width і Height.
Іноді розміри форми розраховуються виходячи з розмірів її внутрішньої робочої області (client area), на якій розміщуються компоненти. Як відомо, до робочої області не входять рамка і заголовок. Розміри робочої області зберігаються у властивостях ClientWidth і ClientHeight. При їх встановленні значення властивостей Width і Height автоматично перераховуються (і навпаки).
Буває, що при виборі розмірів форми враховуються розміри екрана. Оскільки сучасні відео-адаптери підтримують безліч режимів з різними дозволами, постає питання: як забезпечити однакову пропорцію між формою і екраном незалежно від роздільної здатності дисплея. На цей випадок у формі передбачено властивість Scaled. Якщо воно встановлено в значення True, то форма буде автоматично масштабуватися в залежності від роздільної здатності дисплея.
При переміщенні по екрану, форма може злегка прилипати до країв екрану, якщо краї форми знаходяться в безпосередній близькості від них. Це відбувається в тому випадку, якщо властивість ScreenSnap містить значення True. Відстань форми до країв екрану, при якому форма прилипає, задається у властивості SnapBuffer і вимірюється в пікселях.
Працюючи з додатком, користувач може згорнути форму або розгорнути її на всю робочу область екрану за допомогою відповідних кнопок рамки. Стан форми (згорнута або розгорнута) визначається властивістю WindowState, Яке приймає такі значення:
- wsNormal – форма знаходиться у нормальному стані (ні згорнута, ні розгорнуто на весь екран);
- wsMinimized – форма згорнута;
- wsMaximized – форма розгорнуто на весь екран.
Якщо при проектуванні ви зміните значення властивості WindowState на wsMinimized або wsMaximized, то отримаєте форму, яка при першій появі буде автоматично або згорнута в панель завдань, або розгорнута на весь екран.
На комп'ютері з двома і більше моніторами існує можливість вибрати для форми монітор, на якому вона відображається. Для цього слід встановити властивість DefaultMonitor в одне з наступних значень:
- dmDesktop – форма відображається на поточному моніторі; ніяких спроб розмістити форму на якомусь конкретному моніторі не робиться;
- dmPrimary – форма відображається на першому моніторі в списку Monitors об'єкта Screen (Див. пункт 7.7.2);
- dmMainForm – форма відображається на тому моніторі, на якому знаходиться головна форма;
- dmActiveForm – форма відображається на тому моніторі, на якому знаходиться активна в даний момент форма.
Властивість DefaultMonitor враховується лише в тому випадку, якщо в програмі існує головна форма.
7.3.5. Колір робочої області форми
З розмірами форми все ясно і тепер охочі можуть змінити стандартний колір її фону за допомогою властивості Color. Для цього слід звернутися до вікна властивостей. Перейдіть до властивості Color, Відкрийте список, що випадає, і виберіть будь-який колір з набору базових кольорів. Базові кольори представлені в списку іменованими константами. Ви можете також вибрати колір з усієї кольорової палітри, виконавши подвійне клацання миші в полі значення властивості. На екрані з'явиться стандартне діалогове вікно вибору кольору (рисунок 7.22).
Малюнок 7.22. Стандартоне діалогове вікно вибору кольору
Коли ви встановите колір у вікні властивостей, зміна негайно позначиться на формі. Можна працювати з самими різними кольорами, але хорошим тоном вважається використовувати стандартну колірну гаму. Тому краще значення для властивості Color – ClBtnFace (колір такий, як у кнопок).
7.3.6. Рамка форми
У зовнішньому вигляді форми дуже важливу роль грає рамка і розташовані на ній кнопки "Згорнути", "Розгорнути", "Закрити" (рисунок 7.23). Стиль рамки задається за допомогою властивості BorderStyle, Що може приймати такі значення:
- bsNone – біля вікна взагалі немає ні рамки, ні заголовка;
- bsDialog – незмінна в розмірах рамка, властива діалоговим вікнам;
- bsSingle – незмінна в розмірах рамка для звичайного вікна;
- bsSizeable – змінна в розмірах рамка для звичайного вікна;
- bsToolWindow – аналогічно значенню bsSingle, але вікно має злегка зменшений заголовок, що свідчить про його службовому призначення;
- bsSizeToolWin – аналогічно значенню bsSizeable, але вікно має злегка зменшений заголовок, що свідчить про його службовому призначення.
Зазвичай властивість BorderStyle має значення bsSizeable. У цьому випадку форма має стандартну змінну в розмірах рамку (як при проектуванні), заголовок, меню керування, кнопки "Згорнути", "Розгорнути", "Закрити" і, іноді, "Довідка". Для вказівки того, які саме з цих елементів відображати, використовується властивість BorderIcons. Список його можливих значень наступний:
- biSystemMenu – рамка форми містить меню управління, яке викликається клацанням правої кнопки миші по заголовку форми;
- biMinimize – рамка форми має кнопку "Згорнути";
- biMaximize – рамка форми має кнопку "Розгорнути";
- biHelp – рамка форми має кнопку "Довідка". При натисканні кнопки "Довідка", курсор миші перетворюється на стрілку зі знаком питання. Вибираючи таким курсором потрібний елемент форми, користувач отримує по ньому довідку у спливаючому вікні.
Малюнок 7.23. Рамка форми і її контекстне меню
Команди меню управління не потребують коментарів.
7.3.7. Значок форми
Якщо ви розробляєте комерційне додаток, а не тестовий приклад, слід подбати про те, щоб форма мала в своєму лівому верхньому кутку виразний значок. Для розробки значків існує безліч коштів, на яких ми не будемо зупинятися. Коли значок готовий і збережений у файлі, його потрібно просто встановити в якості значення властивості Icon (Рисунок 7.24).
Малюнок 7.36. Додаток з двома формами на екрані
Таким чином, при використанні методу Show користувач може працювати одночасно з декількома формами, перемикаючись між ними.
Увага! Перемикаючись між формами MainForm і SecondaryForm, Ви можете припустити, що вони рівноправні. Однак насправді це не так. Форма MainForm є головною, а форма SecondaryForm – Другорядною. У чому це проявляється? Та хоча б у тому, що якщо ви закриєте форму MainForm, То форма SecondaryForm теж закриється, і додаток завершиться. Якщо ж ви закриєте форму SecondaryForm, То форма MainForm на екрані залишиться.
Ситуація, коли користувачеві пропонується для роботи відразу декілька доступних форм, зустрічається рідко. Тому для показу форми в основному застосовується метод ShowModal. Він забезпечує роботу форми в монопольному режимі, не повертаючи управління до тих пір, поки користувач не закриє форму.
5. Подивимося, що станеться,
Схожі статті:
- JavaScript (0)
- Трохи про PHP. (0)
- Випадають меню за допомогою CSS (0)
- Зовнішні критерії релевантності (0)
- Cookies в PHP. (0)
- No spam.php (0)
- Звітність IBM Rational ClearCase. Частина 2 (0)
Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.
Коментарів поки що немає.
Ваш отзыв
Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>