Кроме программ, структуру которых мы только что рассмотрели, средства языка позволяют создавать модули. В отличие от программы, модуль не может быть автономно запущен на выполнение и содержит элементы, например, переменные и подпрограммы, которые допускается использовать в программе или в других модулях. Для того чтобы можно было использовать средства модуля, его необходимо подключить, указав имя этого модуля в разделе uses. Типичными примерами модулей являются System и SysUtils, содержащие большое количество стандартных подпрограмм. Напомним, что для каждой формы приложения создается отдельный модуль.
Компилятор распознает модуль по его заголовку и создает в результате своей работы не исполняемый файл (ехе), как это было для приложения, а файл модуля с расширением dcu.
Модуль состоит из заголовка, в котором после ключевого слова unit указывается имя модуля, и четырех разделов: интерфейса (interface), реализации (implementation), инициализации (initialization) И деинициализации (Finalization).
Модуль имеет следующую структуру:
В разделе интерфейса размещаются описания идентификаторов, которые должны быть доступны всем модулям и программам, использующим этот модуль и содержащим его имя в списке uses. В разделе интерфейса объявляются типы, константы, переменные и подпрограммы. При этом для подпрограмм указываются только их заголовки. Другие используемые модули указываются в списке uses. Раздел интерфейса начинается ключевым словом Interface.
В разделе реализации располагается код подпрограмм, заголовки которых были приведены в разделе интерфейса. Порядок следования подпрограмм может не совпадать с порядком расположения их заголовков, приводимых в разделе интерфейса. Кроме того, допускается оставлять в заголовке только имя подпрограммы, т. к. список параметров и тип результата функции уже были предварительно указаны. В разделе реализации можно также описывать типы, объявлять константы и переменные и описывать подпрограммы, которые используются только в этом модуле и за его пределами не видны. Раздел интерфейса начинается словом Implementation.
В разделе инициализации располагаются инструкции, выполняемые в начале работы программы, которая подключает данный модуль. Разделы инициализации модулей выполняются в том порядке, в котором они перечислены в списке раздела uses программы. Раздел инициализации начинается словом Initialization и является необязательным.
При наличии раздела инициализации в модуле можно использовать раздел деинициализации, который начинается словом Finalization и является необязательным. В этом разделе располагаются инструкции, выполняемые при завершении программы. Разделы деинициализации модулей выполняются в порядке, обратном порядку их перечисления в списке uses программы.
Модули в Delphi
Разработав некоторую функцию, программист может использовать ее в другой программе, поместив текст этой функции в раздел implementation. Однако этот способ неудобен, т. к. приходится набирать текст функции зановоили копировать его из текста другой программы.
Создание модуля
Delphi позволяет программисту поместить свои функции и процедуры в отдельный модуль, а затем использовать процедуры и функции модуля в своих программах, указав имя модуля в списке модулей, необходимых программе (инструкция uses).
Чтобы приступить к созданию модуля, нужно сначала закрыть окно формы и окно модуля формы (в ответ на вопрос о необходимости сохранения модуля следует выбрать No, т. е. модуль, соответствующий закрытой форме, сохранять не надо). Затем из меню File нужно выбрать команду New | Unit. В результате открывается окно редактора кода, в котором находится сформированный Delphi шаблон модуля. Его текст приведен в листинге 6.7.
Листинг 6.7. Шаблон модуля
Начинается модуль заголовком — инструкцией unit, в которой указано имя модуля. Во время сохранения модуля это имя будет автоматически заменено на имя, указанное программистом.
Слово interface отмечает раздел интерфейса модуля. В этот раздел программист должен поместить объявления находящихся в модуле процедур и функций, которые могут быть вызваны из других модулей, использующих данный.
В раздел implementation (реализация) нужно поместить процедуры и функции, объявленные в разделе interface. В качестве примера в листинге 6.8 приведен модуль программиста, который содержит рассмотренные ранее функции isint и IsFloat.
Для работы компонентов понадобится
Набор библиотек JEDI API распаковываем в папку (путь указываю для примера, каждый может распаковывать туда куда душе будет угодно, главное что-бы путь в Environment Variables был прописан правильно):
Набор моих библиотек распаковываем в папку (про расположение папки см. выше):
-
1. Запускаем Delphi
- $(JEDI)jwaranches2.3Common
- $(JEDI)jwaranches2.3Includes
- $(JEDI)jwaranches2.3SaCMAPI
- $(JEDI)jwaranches2.3Win32API
- $(KANDIRAL)Release$(ProductVersion)$(Platform)
- $(KANDIRAL)Resources
- $(KANDIRAL)Common
- $(KANDIRAL)Automation
- $(KANDIRAL)File
- $(KANDIRAL)Media
- $(KANDIRAL)Net
- $(KANDIRAL)Utils
- $(KANDIRAL)Graphics
- Kandiral150.groupproj Delphi XE
- Kandiral160.groupproj Delphi XE2
- Kandiral170.groupproj Delphi XE3
- Kandiral180.groupproj Delphi XE4
- Kandiral190.groupproj Delphi XE5
- Kandiral200.groupproj Delphi XE6
- Kandiral210.groupproj Delphi XE7
- Kandiral220.groupproj Delphi XE8
- Kandiral230.groupproj Delphi 10 Seattle
- Kandiral240.groupproj Delphi 10.1 Berlin
- Kandiral250.groupproj Delphi 10.2 Tokyo
- Kandiral260.groupproj Delphi 10.3 Rio
Если всё сделано правильно, то в палитре компонентов должны появиться установленные элементы.
При установке путей к библиотекам нужно указать платформу "32-bit Windows"
В некоторых версиях компилятор ругается на файл с картинками
Мне, во всех случаях возникновения этой ошибки, помог перезапуск Delphi.
Если перезапуск Delphi не помогает, то идём следующим путем
Первый способ. Убираем из пакета файл с картинками. На работу библиотек это не повлияет, просто сами компоненты будут без картинок. Для этого в "Project Manager" на названии пакета (например KRCommon160) жмём правой кнопкой мыши и в контекстном меню выбираем "View Source"
и перекомпилируем пакет.
Второй способ. Подключаем картинки старого формата. В каждом пакете есть файл типа "ИмяПакета.dcr", в нем содержатся картинки всех компонентов (которые я уже нарисовал). Но есть и еще dcr файлы, которые сделаны в imageedit от Delphi 7. Второй способ заключается в том, что-бы заменить новый файл с картинками на старые. Для этого в "Project Manager" на названии пакета (например KRCommon160) жмём правой кнопкой мыши и в контекстном меню выбираем "View Source"
И вместо файла KRCommon.dcr подключаем все остальные dcr файлы из папки Common
Перекомпилируем пакет. Аналогично проделываем с остальными пакетами где вылетает ошибка.