Комментарии и переменные в Delphi. Урок №3

Язык программирования 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 комментарии можно оформить двумя способами:

  1. Используя двойной слеш. Все что находится после двойного слеша в Delphi — это комментарий. Но так можно закомментировать только одну строку.
  2. Используя фигурные скобки. Все что заключено в фигурные скобки — это тоже комментарий. Этим способом можно закомментировать несколько строк.

Вот небольшой пример:

// Это комментарий
А это уже не комментарий
Это не комментарий // А вот это уже комментарий
{Все что в фигурных
скобках — это
комментарий}

Когда я буду показывать вам примеры программ на 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).

Delphi Функции

Функция Abs – предназначена для получения абсолютной величины числа (модуль)

Функция Addr – возвращает адрес переменной, функции или процедуры

Функция AnsiCompareStr – сравнение двух строк на равенство

Функция AnsiCompareText – сравнение двух строк на равенство

Функция AnsiContainsStr – возвращается истина, если строка содержит подстроку

Функция AnsiEndsStr – возвращается истина, если строка заканчивается подстрокой

Функция AnsiIndexStr – сравнивает строку со списком строк, возвращает соответствующий индекс

Функция AnsiLeftStr – извлекает символы с левой стороны строки

Функция AnsiLowerCase – символы верхнего регистра изменяются в строку со строчными буквами

Функция AnsiMatchStr – возвращается истина, если строка точно соответствует какой-либо строке из списка

Функция AnsiMidStr – возвращает подстроку из средних символов строки

Функция AnsiPos – находит позицию одной строки в другой

Функция AnsiReplaceStr – заменяет часть одной строки другой

Функция AnsiReverseString – переворачивает последовательность символов в строке

Функция AnsiRightStr – извлечение символов с правой стороны строки

Функция AnsiStartsStr – возвращает True, если строка начинается с подстроки

Функция AnsiUpperCase – символы нижнего регистра изменяются на символы верхнего регистра

Функция ArcCos – арккосинус числа, возвращается в радианах

Функция ArcSin – арксинус числа, возвращается в радианах

Функция ArcTan – арктангенс числа, возвращается в радианах

Функция Assigned – осуществляет проверку функциональности указателей, объектов, методов

Функция BeginThread – начинает отдельный поток выполнения кода

Функция Bounds – передаёт координаты вершин объекта типа TRect (прямоугольник)

Функция CelsiusToFahrenheit – конвертирует значение температуры из Цельсия в Фаренгейта

Функция ChangeFileExt – изменяет расширение имени файла

Функция Chr – конвертирует целое число в символ

Функция Concat – cоединяет несколько строк в одну

Функция Convert – преобразует одну величину измерения в другую

Функция Copy – создает копию части строки или части массива

Функция Cos – косинус числа

Функция CreateDir – создаёт директорию

Функция CurrToStr – преобразует денежную величину в строку

Функция CurrToStrF – преобразует денежную величину в строку с форматированием

Функция Date – возвращает текущую дату

Функция DateTimeToFileDate – преобразует значение TDateTime в формат date/time формат файла

Функция DateTimeToStr – конвертирует значение даты и времени TDateTime в строку

Функция DateToStr – преобразует значение даты TDateTime в строку

Функция DayOfTheMonth – дает день месяца для значения TDateTime (ISO 8601)

Функция DayOfTheWeek – возвращает индекс дня недели для значения TDateTime (ISO 8601)

Функция DayOfTheYear – выдает день года для значения TDateTime (ISO 8601)

Функция DayOfWeek – выдает индекс дня недели для значения TDateTime

Функция DaysBetween – выдает целое число дней между 2 датами

Функция DaysInAMonth – выдает число дней в месяце

Функция DaysInAYear – выдает число дней в году

Функция DaySpan – выдает дробное число дней между 2 датами

Функция DegToRad – преобразовывает значения градусов в радианы

Функция DeleteFile – удаляет файл, указанный в параметре

Функция DirectoryExists – возвращает True, если указанная директория существует

Функция DiskFree – выдает число свободных байтов на указанном диске

Функция DiskSize – выдает размер указанного диска в байтах

Функция DupeString – создает строку, содержащую копии подстроки

Функция EncodeDate – формирует значение TDateTime из значений года, месяца и дня

Функция EncodeDateTime – формирует значение TDateTime из значений времени и дня

Функция EncodeTime – формирует значение TDateTime из значений часа, минуты, секунды и миллисекунды

Функция EndOfADay – генерирует значение TDateTime, установленное на самый конец дня

Функция EndOfAMonth – генерация значения TDateTime, установленное на самый конец месяца

Функция Eof – возвращает True, если позиция курсора находится в конце файла открытого с помощью Reset

Функция Eoln – возвращает True, если позиция курсора находится в конце строки

Функция Exp – выдаёт экспоненту числа

Функция ExtractFileDir – извлекает из полного имени файла название папки

Функция ExtractFileDrive – извлекает из полного имени файла название диска

Функция ExtractFileExt – извлекает из полного имени файла его расширение

Функция ExtractFileName – извлекает из полного имени файла краткое имя файла

Функция ExtractFilePath – извлекает из полного имени файла название патча

Функция FahrenheitToCelsius – конвертирует температуру из Фаренгейта в Цельсий

Функция FileAge – получение даты/время последнего изменения файла, не открывая его

Функция FileDateToDateTime – конвертирует формат даты/времени файла в значение TDateTime

Функция FileExists – возвращает True если указанный файл существует

Функция FileGetAttr – выдаёт атрибуты файла

Функция FilePos – даёт позицию файла в двоичном или текстовом файле

Функция FileSearch – поиск файла в одной или более папках

Функция FileSetAttr – устанавливает атрибуты файла

Функция FileSetDate – установка даты и времени последнего изменения файла

Функция FileSize – выдает размер открытого файла в записях

Функция FindClose – закрывает успешный FindFirst поиск файла

Функция FindCmdLineSwitch – определяет, был передан некоторый параметр выключатель

Функция FindFirst – находит все файлы, соответствующие маске файла и атрибутов

Функция FindNext – находит следующий файл после успешного FindFirst

Функция FloatToStrF – преобразует значение с плавающей запятой в строку с форматированием

Функция ForceDirectories – создаёт новый путь каталогов

Функция Format – расширенное форматирование чисел и текста в строке

Функция FormatCurr – расширенное форматирование значений валюты в строку

Функция FormatDateTime – расширенное форматирование переменной TDateTime в строку

Функция FormatFloat – расширенное форматирование числа с плавающей запятой в строку

Функция Frac – дробная часть числа с плавающей запятой

Функция GetCurrentDir – возвращает текущий каталог (диск плюс каталог)

Функция GetLastError – выдаёт код ошибки последнего неудачного Windows API вызова

Функция GetMem – получает указанное число байтов памяти

Функция Hi – возвращает байт старшего разряда от типа Integer

Функция High – возвращает самое высокое значение типа или переменной

Функция IncDay – приращивает переменную типа TDateTime на + или - число дней

Функция IncMillisecond – приращивает переменную типа TDateTime на + или - число миллисекунд

Функция IncMinute – приращивает переменную типа TDateTime на + или - число минут

Функция IncMonth – увеличивает TDateTime переменную на некоторое число месяцев

Функция IncSecond – приращивает переменную типа TDateTime на + или - число секунд

Функция IncYear – увеличивает TDateTime переменную на количество лет

Функция InputBox – отображает диалог, который просит пользователя о вводе текста, со значением по умолчанию

Функция InputQuery – отображает диалог, который просит пользователя о вводе текста

Функция Int – целая часть числа с плавающей точкой

Функция IntToHex – преобразует целое число в шестнадцатеричную строку

Функция IntToStr – конвертирует целое число в строку

Функция IOResult – содержит возвращаемый код последней операции ввода/вывода

Функция IsInfinite – проверяет, является ли число с плавающей точкой бесконечным

Функция IsLeapYear – возвращает True, если данный календарный год високосный

Функция IsMultiThread – возвращает True, если код выполняет множество потоков

Функция IsNaN – выясняет, содержит ли число с плавающей запятой настоящее число

Функция LastDelimiter – находит последнюю позицию указанных символов в строке

Функция Length – возвращает число элементов в массиве или строке

Функция Ln – выдает натуральный логарифм числа

Функция Lo – возвращает младший байт целого числа (2-байтового)

Функция Log10 – вычисляет логарифм числа с основанием 10

Функция Low – возвращает самое низкое значение типа или переменной

Функция Max – выдает максимальное число из двух целых значений

Функция Mean – выдает среднее число из набора чисел

Функция MessageDlg – отображает сообщение, знак и выбираемые кнопки

Функция MessageDlgPos – отображает сообщение и кнопки в заданной позиции экрана

Функция Min – выдает минимальное из двух целых значений

Функция MonthOfTheYear – выдает месяц года для значения TDateTime

Функция Now – выдает текущую дату и время

Функция Odd – проверяет, является ли целое число нечетным

Функция Ord – порядковое значение целого числа, символа или перечисления

Функция ParamCount – выдает число параметров переданной текущей программе

Функция ParamStr – возвращает один из параметров, используемых для запуска текущей программы

Функция Pi – математическая константа

Функция Point – генерирует значение TPoint из значений X и Y

Функция PointsEqual – сравнивает два значения TPoint на предмет равенства

Функция Pred – уменьшает порядковую переменную

Функция Printer – возвращает ссылку на глобальный объект Printer

Функция PromptForFileName – показывает диалог, позволяющий пользователю выбрать файл

Функция PtInRect – проверяет, находится ли точка в пределах прямоугольника

Функция RadToDeg – преобразовывает значение радиана в градусы

Функция Random – генерирует случайное число с плавающей запятой или целое число

Функция RandomRange – генерирует произвольное число в пределах введённого диапазона

Функция RecodeDate – изменяет только дату переменной TDateTime

Функция RecodeTime – изменяет только время переменной TDateTime

Функция Rect – создаёт объект TRect (прямоугольник) с указанием 2 точек или 4 координат

Функция RemoveDir – удалить директорию

Функция RenameFile – переименование файла или директории

Функция Round – округление чисел с плавающей запятой до целого числа

Функция SeekEof – пропускает символы, пока не встретится конец файла

Функция SeekEoln – пропускает символы, пока не встретится конец текущей строки или файла

Функция SelectDirectory – выводит диалоговое окно, с помощью которого пользователь может выбрать директорию

Функция SetCurrentDir – изменяет текущую директорию

Функция ShellExecute – открывает или выводит на печать указанный файл

Функция Sin – возвращает синус числа

Функция SizeOf – возвращает занимаемый размер типа или переменной в байтах

Функция Slice – создает часть массива с параметром "Открытый Массив"

Функция Sqr – возвращает квадрат числа

Функция Sqrt – возвращает квадратный корень числа

Функция StringOfChar – создает строку из одного символа, повторенного много раз

Функция StringReplace – заменяет одну или несколько подстрок, найденных в заданной строке

Функция StringToWideChar – преобразует обычную строку в WideChar-буфер с завершающим 0

Функция StrScan – ищет заданные символы в строке

Функция StrToCurr – преобразует числовую строку в денежное выражение

Функция StrToDate – конвертирует строку с датой в значение типа TDateTime

Функция StrToDateTime – конвертирует строку с датой и временем в значение типа TDateTime

Функция StrToFloat – преобразует числовую строку в значение с плавающей запятой

Функция StrToInt – преобразует строку с целым значением в Integer

Функция StrToInt64 – преобразует строку с целым значением в Int64

Функция StrToInt64Def – преобразует строку с целым значением в Int64, учитывая значение по умолчанию

Функция StrToIntDef – преобразует строку в значение с типом Integer, учитывая значение по умолчанию

Функция StrToTime – конвертирует строку с временем в значение с типом TDateTime

Функция StuffString – заменяет часть одной строки на другую

Функция Succ – инкрементирует порядковую переменную

Функция Sum – находит сумму элементов массива, состоящего из чисел с плавающей точкой

Функция Tan – тангенс числа

Функция Time – возвращает текущее время

Функция TimeToStr – конвертирует значение времени типа TDateTime в строку

Функция Tomorrow – возвращает дату завтрашнего дня

Функция Trim – удаляет начальные и конечные пробелы в строке

Функция TrimLeft – удаляет начальные пробелы в строке

Функция TrimRight – удаляет конечные пробелы в строке

Функция Trunc – целая часть числа с плавающей запятой

Функция VarType – возвращает текущий тип Variant переменной

Функция WideCharToString – копирует строку WideChar, заканчивающуюся нулём, в нормальную строку

Функция WrapText – добавляет перенос строки в строку, чтобы имитировать перенос слов

Функция Yesterday – возвращает вчерашнюю дату в местном часовом поясе

Delphi Процедуры

Процедура Abort – прерывает обработку команд и выходит к последнему исключительному блоку

Процедура Append – открывает текстовый файл, для добавления записей в файл (добавляет в конец файла)

Процедура AssignFile – связывает дескриптор файла с бинарным или текстовым файлом

Процедура AssignPrn – обрабатывает принтер как текстовый файл (простой способ печати текста)

Процедура Beep – делает звук гудка

Процедура BlockRead – читает блок записей данных из нетипизированного двоичного файла

Процедура BlockWrite – записывает блок записей данных в нетипизированный двоичный файл

Процедура Break – выполняет выход из одного цикла

Процедура ChDir – выбор диска и директории (папки), в которой будет производиться работа

Процедура CloseFile – закрывает открытый файл

Процедура Continue – заставляет перейти к следующей итерации цикла

Процедура DateTimeToString – огромные возможности форматирования даты в строку

Процедура Dec – декремент порядковой переменной

Процедура DecodeDate – извлекает значения года, месяца, дня из TDateTime переменной

Процедура DecodeDateTime – разбивает TDateTime переменную на ее части даты/времени

Процедура DecodeTime – разбивает значение TDateTime на отдельные значения времени

Процедура Delete – удаляет часть символов из строки

Процедура Dispose – очищает память на которую указывает указатель

Процедура EndThread – заканчивает поток с кодом завершения

Процедура Erase – стирает файл

Процедура Exclude – исключает значение из переменной набора (множества)

Процедура Exit – осуществляет выход из функции или процедуры

Процедура FillChar – заполняет раздел памяти значением байта или символа-заполнителя

Процедура Flush – сбрасывает буферизованные данные текстового файла в файл

Процедура FreeAndNil – освобождение памяти объекта и установка его в nil

Процедура FreeMem – освобождает память, используемую переменной

Процедура GetDir – получает текущий каталог (диск плюс путь) для указанного диска

Процедура GetLocaleFormatSettings – получает региональные значения для безопасных потоков функций

Процедура Halt – заканчивает программу с дополнительным диалогом

Процедура Inc – увеличивает порядковую переменную

Процедура Include – включает значение во множество переменных

Процедура Insert – вставляет строку в другую строку

Процедура MkDir – создаёт каталог

Процедура Move – копирует байты данных из источника в место назначения

Процедура New – создаёт новую переменную типа указатель

Процедура ProcessPath – разделяет строку диск/путь/имя файла на ее составляющие части

Процедура Randomize – устанавливает генератор случайного числа на следующее значение

Процедура Read – позволяет прочитать данные из двоичного или текстового файла

Процедура ReadLn – позволяет прочитать полную строку данных из текстового файла

Процедура Rename – переименование файла

Процедура ReallocMem – позволяет изменить размер существующего блока памяти

Процедура ReplaceDate – изменяет только часть даты TDateTime переменной

Процедура ReplaceTime – изменяет только часть времени TDateTime переменной

Процедура Reset – открывает текстовый файл для чтения, или двоичный файл для чтения/записи

Процедура ReWrite – открывает текстовый или двоичный файл для записи

Процедура RmDir – удаление каталога

Процедура RunError – заканчивает программу с диалогом ошибки

Процедура Seek – перемещает указатель в двоичном файле в новую позицию

Процедура SetLength – изменяет размер строки или размер динамического массива

Процедура SetString – копирует символы из буфера в строку

Процедура ShowMessage – показывает простое диалоговое окно с кнопкой ОК, содержащее заданную строку

Процедура ShowMessageFmt – отображает отформатированные данные в простом диалоговом окне с кнопкой ОК

Процедура ShowMessagePos – показывает строку в простом диалоговом окне размещенном в заданном месте

Процедура Str – конвертирует целое число или число с плавающей точкой в строку

Процедура Truncate – уменьшает размер файла, удаляя все данные после текущей позиции

Процедура Val – конвертирует числовые строки в целое число, или число с плавающей запятой

Процедура Write – записывает данные в бинарный или текстовый файл

Процедура WriteLn – записывает законченную строку данных в текстовый файл

Main Menu