Мова програмування Delphi досить проста у вивченні, але при цьому, вона досить потужна. На цій мові програмування написано дуже багато дійсно крутих програм, таких як: Open Server, Total Commander, Skype (до того, як цей додаток викупила компанія Microsoft), Light Alloy, The KMPlayer, AIMP, FastStone Image Viewer, Guitar Pro (до версії 6.0), FL Studio, Sublimetext і багато інших.
В минулих уроках, ми ознайомилися з оболонкою Delphi (інтегрованим середовищем розробки програм). А починаючи з цього уроку — ми вже почнемо вивчати саму мову програмування Delphi.
І перше з чого пропоную почати наше навчання — це коментарі в Delphi.
Що таке коментарі в програмуванні?
Коментарі — це будь-який текст, який ніяк не впливає на код програми. Коментарі ніколи не компілюються і не додаються в виконуваний файл. Вони використовуються розробниками, для того щоб пояснити ту, чи іншу ділянку коду.
У Delphi коментарі можна оформити двома способами:
- Використовуючи подвійний слеш. Все що знаходиться після подвійного слеша в Delphi — це коментар. Але так можна закоментувати тільки один рядок.
- Використовуючи фігурні дужки. Все що укладено в фігурні дужки — це теж коментар. Цим способом можна закоментувати кілька рядків.
Ось невеликий приклад:
// Це коментар
А це вже не коментар
Це не коментар // А ось це вже коментар
{Все що у фігурних
дужках – це
коментар}
Коли я буду показувати вам приклади програм на Delphi, я постійно буду використовувати коментарі, щоб вам було зрозуміло, для чого я пишу той, чи інший код.
Давайте створимо новий проект в Delphi, або відкриємо той проект, який ми створювали на минулому уроці, і докладно розглянемо кожну строчку його коду.
Якщо хто забув, то нагадаю — щоб переключатися між візуальної формою і редактором коду потрібно використовувати клавішу <F12>. Натискаємо F12 і таким чином переходимо в редактор коду.
Я розумію, що поки для вас все це «темний ліс», але в процесі створення реальних програм, все почне прояснюватися. Запам'ятати все відразу неможливо, та й не потрібно. Головне зараз зрозуміти сенс написаної програми.
unit Unit1; // Ім'я модуля
// початок оголошення інтерфейсів
interface
uses // після цього слова йде перелік підключених модулів
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type // після цього слова йде оголошення типів
TForm1 = class(TForm) // Начало описания нового объекта TForm1
// Тут описуються компоненти та події
private // Після цього слова можна описувати закриті дані об'єкта
{ Private declarations } // это подсказка, которую сгенерировал сам Delphi
{Тут можна описувати змінні та методи, доступні тільки для об'єкта TForm1}
public // Після цього слова можна описувати відкриті дані об'єкта
{ Public declarations } // це підказка, яку згенерував сам Delphi
{Тут можна описувати змінні та методи, доступні з будь-якого іншого модуля}
end;
var // Оголошення глобальних змінних
Form1: TForm1; // Це описана змінна Form1 типу об'єкта TForm1
// початок реалізації
implementation
{$R *.dfm} // підключення .dfm файлу. Це файл із даними про візуальні об'єкти
end. // кінець модуля (слово end з крапкою)
А ось те, що я обов'язково рекомендував би запам'ятати вам прямо зараз.
Крапка з комою «;» в Delphi позначає кінець оператора.
Як бачите, в наведеному вище прикладі коду, в кінці декількох рядків проставлений саме цей знак.
Знак «;» ставиться тільки після оператора! І цей знак ніколи не ставиться після ключових слів. Якщо дивитися на наш код, то після uses, type, begin, implementation, private, public крапка з комою не ставиться.
Більшість ключових слів виділяються жирним шрифтом.
Структура коду в Delphi
На самому початку нашого коду стоїть ім'я модуля. Це ім'я таке ж, як і ім'я файлу модуля, але без розширення. Вручну міняти це ім'я не бажано. Воно формується тоді, коли ви зберігаєте свій проект (або модуль) вибравши меню File | Save As.
Після імені модуля йде розділ interface. У ньому описуються інтерфейси модуля, які ми будемо реалізовувати. Кінцем цього розділу є ключове слово implementation (реалізація).
Після implementation починається ще один розділ і закінчується він словом end з крапкою.
Весь код, який ми напишемо в розділі interface буде доступний іншим модулям, які підключать даний модуль. Таким чином, всі змінні, які ми оголосимо тут, будуть доступні і в інших модулях.
У розділі interface також можуть бути і підрозділи: uses, type, var і const.
В uses відбувається підключення глобальних модулів. Тобто, якщо нам потрібно отримати доступ до змінних, функцій, констант і процедур, які описані в якомусь іншому модулі, то його потрібно підключити до поточного модулю. І робиться це саме тут — в uses.
Наприклад, ми хочемо, щоб при натисканні на кнопку здійснювався запуск браузера, і в ньому відкривалося якесь посилання. Для цього вже є готова функція ShellExecute. І все, що нам потрібно — це вказати компілятору шлях, де описана ця функція, зрозумілим компілятору мовою. Тому в uses ми прописуємо ShellApi. Тепер для реалізації нашої задумки досить написати лише одну строку коду і все запрацює без будь-яких проблем.
ShellExecute(Handle, 'open', 'https://d-nik.pro', nil, nil, SW_SHOWNORMAL) ;
Будь-програмний код в Delphi прописується між begin і end (операторні дужки).
- begin — це початок коду;
- end — це кінець коду.
Наприклад, якщо ми створюємо процедуру, то спочатку пишемо її ім'я, а потім весь код цієї процедури поміщаємо між операторними дужками begin та end.
Оголошення змінних в Delphi здійснюється за допомогою ключового слова var. У нашому коді вже оголошена одна змінна — Form1. І оскільки ця змінна описана після оголошення об'єкта і його складових, то ця змінна глобальна.
Глобальна змінна — це така змінна, областю видимості якої є вся програма (якщо тільки ця змінна не перекрита). Глобальні змінні створюються при запуску програми і знищуються при виході з програми. Простими словами — це така змінна, яка доступна завжди і всюди, поки програма працює.
Щоб зрозуміти різницю між глобальною і локальною змінної, і краще розібратися як влаштована мова програмування Delphi, давайте виконаємо невелике практичне завдання.
Мова програмування Delphi. Практичне завдання.
- Створіть новий проект в Delphi (File - New - VCL Forms Application - Delphi).
- Помістіть на форму два компоненти TEdit і одну кнопку TButton.
- Збережіть цей проект (Save All).
- Перейдіть в редактор коду (F12) і оголосіть глобальну змінну YourName типу String в розділі interface. Цю змінну буде видно скрізь і завжди, при роботі програми.
- Тепер в Об'єктному інспекторі виберіть компонент TButton (Button1) і на вкладці Events, створіть для нього обробник події OnClick.
- Перед begin, створеної процедури, оголосіть локальну змінну Age типу String. Цю змінну буде видно тільки в даному модулі. В інших модулях програми ми не зможемо її використовувати.
- Між begin і end створеної процедури, напишіть код:
YourName := Edit1.Text; // присвоюємо змінній YourName значення Edit1
Age := Edit2.Text; // привласнюємо змінній Age значення Edit2
- Тепер створіть ще одну форму File - VCL Form - Delphi.
- Помістіть на цю форму компонент TLabel.
- Для того, щоб ми могли взаємодіяти з головною формою програми, необхідно підключити модуль Unit1. Для цього в меню File вибираємо UseUnit.
- Створіть обробник події для цієї форми OnShow. В об'єктному інспекторі виберіть Form2 TFotm і на вкладці Events клікніть поруч з OnShow.
- Напишіть код для створеної процедури:
Label1.Caption := YourName; // присвоюємо рядку заголовок рівний глобальній змінній YourName
- Перейдіть на вкладку Unit1 і підключіть до нашої головної формі модуль Unit2 (File - UseUnit).
- Додайте в процедуру TForm1.Button1Click ще один рядок коду:
Form2.Show; // відобразити форму 2
- Збережіть і запустіть весь проект.
При натисканні на кнопку у вас повинна з'явитися друга форма і на ній повинен бути виведений той же текст, що і в Edit1.
А ось якщо ми спробуємо отримати дані змінної Age в другій формі, то у нас нічого не вийде.
Label1.Caption := Age;
Компілятор видасть помилку:
Undeclared identifier: 'Age'
Що означає «Неоголошений ідентифікатор». Тобто компілятор не розуміє, де знаходиться змінна Age і які потрібно взяти дані, щоб привласнити їх заголовку компонента Label1.
Адже Локальна змінна — це змінна, оголошена всередині блоку коду. Область видимості такої змінної починається в точці її оголошення і закінчується в кінці цього блоку.
Таким чином, змінну Age видно тільки в межах процедури TForm1.Button1Click модуля 1 (Unit1).