Програмування на мові Delphi. Глава 7. Проект програми

попередня стаття серії


Яке вирішується на комп'ютері завдання реалізується у вигляді прикладної програми, яку для стислості називають додатком. В основі розробки програми в середовищі Delphi лежить проект. Центральною частиною проекту є форма, на яку поміщаються необхідні для вирішення конкретної задачі компоненти. У такій послідовності – проект – форми – компоненти – ми і розглянемо процес створення додатку в середовищі Delphi. Під час викладу матеріалу ми будемо часто звертатися до прикладу з обчисленням ідеального ваги, який був розглянутий в першому розділі. Якщо ви його забули, перечитайте перший розділ ще раз.


7.1. Проект


7.1.1. Поняття проекту


Додаток збирається з багатьох елементів: форм, програмних модулів, зовнішніх бібліотек, картинок, піктограм та ін Кожен елемент розміщується в окремому файлі і має строго певне призначення. Набір всіх файлів, необхідних для створення додатку, називається проектом. Компілятор послідовно обробляє файли проекту і будує з них виконуваний файл. Основні файли проекту можна розділити на кілька типів:



На підставі сказаного можна зобразити процес створення додатку в середовищі 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
Left = 250
Top = 150
Width = 400
Height = 303
Caption = “Weight Calculator”
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = “MS Sans Serif”
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 64
Top = 48
Width = 93
Height = 13
Caption = “Specify your height:”
end
object Label2: TLabel
Left = 64
Top = 144
Width = 84
Height = 13
Caption = “Your ideal weight:”
end
object Button1: TButton
Left = 248
Top = 64
Width = 75
Height = 25
Caption = “Compute”
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 248
Top = 160
Width = 75
Height = 25
Caption = “Close”
TabOrder = 1
end
object Edit1: TEdit
Left = 64
Top = 64
Width = 121
Height = 21
TabOrder = 2
end
object Edit2: TEdit
Left = 64
Top = 160
Width = 121
Height = 21
TabOrder = 3
end
end

Незважаючи на настільки довгий текст опису, розібратися в ньому зовсім не складно. Тут на спеціальній мові задаються початкові значення для властивостей форми 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;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
/ / Алгоритм обчислення ідеального ваги
Edit2.Text := IntToStr(StrToInt(Edit1.Text) – 100 – 10);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

end.


Дамо необхідні коментарі до тексту програмного модуля. На самому початку після ключового слова unit записується ім'я модуля




unit Unit1;

Ні в якому разі не змінюйте це ім'я вручну. Середовище Delphi вимагає, щоб ім'я модуля збігалося з ім'ям файлу, тому якщо ви хочете перейменувати модуль, збережіть його у файлі з новим ім'ям, скориставшись командою меню File / Save As…. Середовище Delphi сама підставить після слова unit нове ім'я. Після цього видаліть старий модуль.


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




uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

Середовище Delphi формує список модулів без вашої участі і автоматично поповнює його, коли ви додаєте на форму нові компоненти. Тим не менш, список підключених модулів можна змінювати прямо в редакторі коду (вручну).


Дивимося далі. У розділі опису типів (type) Оголошено клас форми. За замовчуванням він називається TForm1 і породжений від стандартного класу TForm.




type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Розміщені на форму компоненти представлені полями форми. У нас на формі шість компонентів, тому і полів в описі класу теж шість. Імена полів збігаються з іменами компонентів, заданими у вікні властивостей.


Після полів слідують заголовки методів обробки подій. Назва кожного такого методу середовище Delphi формує автоматично на підставі імені компоненту та імені генерованої ним події. Наприклад, для кнопки Button1 метод обробки події OnClick називається Button1Click.


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



Для вашої зручності в класі форми заздалегідь оголошені порожні секції private і public, В яких ви можете розміщувати будь-які допоміжні поля, методи і властивості. Середовище Delphi їх "в упор не бачить", тому з ними можна працювати тільки на рівні програмного коду. Ви можете поміщати в секцію private атрибути, які потрібні тільки самій формі, а в секцію public – Атрибути, які потрібні ще й іншим формам і модулів.


Після опису класу йде оголошення власне об'єкту форми:




var
Form1: TForm1;

Мінлива Form1 – Це посилання на об'єкт класу TForm1, Конструювання якого виконується у головному файлі проекту – DPR-файлі (див. далі).


На цьому зміст інтерфейсної секції модуля закінчується і починається розділ реалізації (implementation). Спочатку в ньому підключається файл опису форми:




{$R *.dfm}

Будь ласка, не подумайте, що ця директива підключає всі файли з розширенням DFM. Підключається лише один DFM-файл, у якому описана форма даного модуля. Ім'я DFM-файлу виходить заміною зірочки на ім'я модуля, в якому записана директива.


Далі слід реалізація методів обробки подій. Порожні заготовки для них середовище Delphi створює сама одночасно з додаванням заголовків у клас форми. Ви ж наповнюєте їх змістом.




procedure TForm1.Button1Click(Sender: TObject);
begin
/ / Алгоритм обчислення ідеального ваги
Edit2.Text := IntToStr(StrToInt(Edit1.Text) – 100 – 10);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;


Увага! Якщо ви хочете видалити метод обробки події та прибрати посилання на нього, просто зробіть метод порожнім – видаліть весь написаний вами код, включаючи коментарі, і оголошення локальних змінних. При збереженні або компіляції проекту середовище Delphi сама викине з тексту порожні методи.


При уважному вивченні вихідного тексту модуля залишається нез'ясованим одне питання: як забезпечується виклик методів Button1Click і Button2Click при натисканні на формі кнопок, адже в тексті модуля відсутній навіть натяк на це. Все дуже просто. Загляньте в DFM-файл. Крім установки значень властивостей ви знайдете установку і обробників подій.




object Button1: TButton

OnClick = Button1Click
end
object Button2: TButton

OnClick = Button2Click
end

Завдяки цьому опису забезпечується прив'язка методів форми до відповідних подій. До речі, сенс наведеного фрагменту опису стає більш прозорим, якщо згадати, що події в мові Delphi – це насправді властивості, але їх значеннями є покажчики на методи. Таким чином, установка подій мало чим відрізняється від установки властивостей форми, адже за природою це одне і те ж.


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


7.1.4. Головний файл проекту


Для того щоб компілятор знав, які конкретно файли входять до проекту, необхідно якийсь організуючий початок. І воно дійсно є. Це так званий файл проекту, що має розширення DPR (скор. від Delphi Project). Він являє собою головний програмний файл на мові Delphi, який підключає за допомогою оператора uses всі файли модулів, що входять в проект. Для кожного проекту існує тільки один DPR-файл.


Коли ви по команді File / New / Application починаєте розробку нової програми, середовище Delphi автоматично створює файл проекту. У міру створення нових форм вміст цього файлу видозмінюється автоматично. Коли ви закінчите роботу і будете готові компілювати проект, в DPR-файлі буде знаходитися перелік програмних модулів, які будуть подані на вхід компілятору. Щоб побачити вміст DPR-файлу нашого застосування, що обчислює ідеальний вага, виберіть у меню середовища Delphi команду Project / View Source. У редакторі коду з'явиться нова сторінка з наступним текстом:




program Project1;

uses
Forms,
Unit1 in “Unit1.pas” {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


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


Підключається слідом модуль Unit1 містить визначення форми. Назва форми наводиться у фігурних дужках. Директива in вказує на те, що модуль є необхідною частиною проекту і існує у вигляді вихідного тексту на мові Delphi.


Директива {$ R *. res} підключає до результуючою виконуваному файлу так звані ресурси, в даному випадку значок програми. Цей значок буде видно на панелі задач.


Далі випливає головний програмний блок, що містить виклики трьох методів об'єкту Application. Виклик методу Initialize готує додаток до роботи, метод CreateForm завантажує і ініціалізує форму Form1, А метод Run активізує форму і починає виконання програми. Фактично час роботи методу Run – Це час роботи програми. Вихід з методу Run відбувається тоді, коли користувач закриває головну форму додатку; в результаті завершенні програм.


Увага! Ніколи не змінюйте DPR-файл вручну. Залиште цю роботу для середовища Delphi. Додавання та видалення модулів, а також управління створенням форм здійснюється за допомогою команд і діалогових вікон середовища.


7.1.5. Інші файли проекту


Вище ми розглянули основні файли проекту. Крім них існує ряд додаткових файлів:



До проекту можуть входити також логічно автономні елементи: точкові малюнки (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.20. Заголовок форми






ПРИМІТКА

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


7.3.3. Стиль форми


Налаштовуючи форму, потрібно приймати до уваги, який призначений для користувача інтерфейс буде мати ваше додаток: багатодокументний інтерфейс MDI (від англ. Multiple Document Interface) чи звичайний одно-документний інтерфейс SDI (від англ. Single Document Interface). За це відповідає властивість форми FormStyle, Що може приймати такі значення:



Багато додатків, з якими ви працюєте, мають користувальницький інтерфейс 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 можна організувати автоматичне розміщення форми на екрані, вибравши одну з таких можливих значень:



Іноді розміри форми розраховуються виходячи з розмірів її внутрішньої робочої області (client area), на якій розміщуються компоненти. Як відомо, до робочої області не входять рамка і заголовок. Розміри робочої області зберігаються у властивостях ClientWidth і ClientHeight. При їх встановленні значення властивостей Width і Height автоматично перераховуються (і навпаки).


Буває, що при виборі розмірів форми враховуються розміри екрана. Оскільки сучасні відео-адаптери підтримують безліч режимів з різними дозволами, постає питання: як забезпечити однакову пропорцію між формою і екраном незалежно від роздільної здатності дисплея. На цей випадок у формі передбачено властивість Scaled. Якщо воно встановлено в значення True, то форма буде автоматично масштабуватися в залежності від роздільної здатності дисплея.


При переміщенні по екрану, форма може злегка прилипати до країв екрану, якщо краї форми знаходяться в безпосередній близькості від них. Це відбувається в тому випадку, якщо властивість ScreenSnap містить значення True. Відстань форми до країв екрану, при якому форма прилипає, задається у властивості SnapBuffer і вимірюється в пікселях.


Працюючи з додатком, користувач може згорнути форму або розгорнути її на всю робочу область екрану за допомогою відповідних кнопок рамки. Стан форми (згорнута або розгорнута) визначається властивістю WindowState, Яке приймає такі значення:



Якщо при проектуванні ви зміните значення властивості WindowState на wsMinimized або wsMaximized, то отримаєте форму, яка при першій появі буде автоматично або згорнута в панель завдань, або розгорнута на весь екран.


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



Властивість DefaultMonitor враховується лише в тому випадку, якщо в програмі існує головна форма.


7.3.5. Колір робочої області форми


З розмірами форми все ясно і тепер охочі можуть змінити стандартний колір її фону за допомогою властивості Color. Для цього слід звернутися до вікна властивостей. Перейдіть до властивості Color, Відкрийте список, що випадає, і виберіть будь-який колір з набору базових кольорів. Базові кольори представлені в списку іменованими константами. Ви можете також вибрати колір з усієї кольорової палітри, виконавши подвійне клацання миші в полі значення властивості. На екрані з'явиться стандартне діалогове вікно вибору кольору (рисунок 7.22).



Малюнок 7.22. Стандартоне діалогове вікно вибору кольору


Коли ви встановите колір у вікні властивостей, зміна негайно позначиться на формі. Можна працювати з самими різними кольорами, але хорошим тоном вважається використовувати стандартну колірну гаму. Тому краще значення для властивості Color – ClBtnFace (колір такий, як у кнопок).


7.3.6. Рамка форми


У зовнішньому вигляді форми дуже важливу роль грає рамка і розташовані на ній кнопки "Згорнути", "Розгорнути", "Закрити" (рисунок 7.23). Стиль рамки задається за допомогою властивості BorderStyle, Що може приймати такі значення:



Зазвичай властивість BorderStyle має значення bsSizeable. У цьому випадку форма має стандартну змінну в розмірах рамку (як при проектуванні), заголовок, меню керування, кнопки "Згорнути", "Розгорнути", "Закрити" і, іноді, "Довідка". Для вказівки того, які саме з цих елементів відображати, використовується властивість BorderIcons. Список його можливих значень наступний:




Малюнок 7.23. Рамка форми і її контекстне меню


Команди меню управління не потребують коментарів.


7.3.7. Значок форми


Якщо ви розробляєте комерційне додаток, а не тестовий приклад, слід подбати про те, щоб форма мала в своєму лівому верхньому кутку виразний значок. Для розробки значків існує безліч коштів, на яких ми не будемо зупинятися. Коли значок готовий і збережений у файлі, його потрібно просто встановити в якості значення властивості Icon (Рисунок 7.24).



Малюнок 7.36. Додаток з двома формами на екрані


Таким чином, при використанні методу Show користувач може працювати одночасно з декількома формами, перемикаючись між ними.


Увага! Перемикаючись між формами MainForm і SecondaryForm, Ви можете припустити, що вони рівноправні. Однак насправді це не так. Форма MainForm є головною, а форма SecondaryForm – Другорядною. У чому це проявляється? Та хоча б у тому, що якщо ви закриєте форму MainForm, То форма SecondaryForm теж закриється, і додаток завершиться. Якщо ж ви закриєте форму SecondaryForm, То форма MainForm на екрані залишиться.


Ситуація, коли користувачеві пропонується для роботи відразу декілька доступних форм, зустрічається рідко. Тому для показу форми в основному застосовується метод ShowModal. Він забезпечує роботу форми в монопольному режимі, не повертаючи управління до тих пір, поки користувач не закриє форму.


5. Подивимося, що станеться,

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*