Язык программирования 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).