Общая структура модуля
Каждый модуль в общем случае имеет следующую структуру:
unit <имя модуля>:
interface // Открытый интерфейс модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей}
implementation // Реализация модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
initialization {не обязательный}
<0ператоры, выполняемые один раз при первом обращении к модулю>
finalization {не обязательный}
<0ператоры, выполняемые при любом завершении работы модуля>
end.
Рассмотрим теперь, как выглядят тексты модулей. Далее приведен текст модуля с пустой формой. Подробные комментарии в этом тексте поясняют, куда и что в этот код можно добавлять:
unit Unitl;
interface // Открытый интерфейс модуля
uses {Список подключаемых модулей}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type {Объявление класса формы}
TForml = class(TForm)
private // Закрытый раздел класса
{ Private declarations }
{Объявления переменных, функций и процедур, включаемых в класс формы, но не доступных для других модулей}
public // Открытый раздел класса
{ Public declarations }
{Объявления переменных, функций и процедур, включаемых в класс формы и доступных для других модулей}
end;
var
Forml: TForml;
{Объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей, но которые не включаются в класс формы}
implementation // Реализация модуля
{Сюда могут помещаться предложения uses, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
{$R *.dfm}
end.
Модуль начинается с ключевого слова unit, после которого указывается имя модуля. Оно совпадает с именем файла, в котором был сохранен модуль. По умолчанию для первого модуля используется имя Unit1, для второго — Unit2 и т. д.
СОВЕТ Если в вашем приложении несколько модулей, сохраняйте их файлы с осмысленными именами, изменяя тем самым имена модулей, заданные Delphi no умолчанию.
Текст модуля состоит из двух основных разделов: interfасе — открытый интерфейс модуля и implementation — реализация модуля. Все, что помещается непосредственно в раздел interfасе (типы, переменные, константы, функции, процедуры), может быть использовано другими модулями программы. Все, что помещается в раздел implementation, является внутренним делом модуля. Внешние модули не могут видеть типы, переменные, константы, функции и процедуры, размещенные в разделе реализации.
В разделе interface после предложения uses, содержащего список подключаемых модулей, располагается заготовка объявления класса формы, подготовленная Delphi. Имя класса формы — TForml. Класс содержит два раздела: private — закрытый раздел класса и public — открытый раздел класса. То, что объявлено в разделе publiс, будет доступно для других классов и модулей. То, что объявлено в разделе private, доступно только в пределах данного модуля.
За объявлением класса формы следуют строки
var
Forml: TForml;
Таким образом объявляется переменная Form1 класса TForm1.
Затем следует пока пустой раздел реализации implementation, в котором содержится только директива компилятора {$R *.dfm}, обеспечивающая компоновку файлов ресурсов форм
ВНИМАНИЕДирективу {$R *.dfm} нельзя удалять из текста модуля, так как в противном случае загрузочный модуль не будет создан и будет сгенерировано исключение EResNotFound.
ПРИМЕЧАНИЕКроме разделов interface и implementation, можно добавить в модуль еще два раздела: initialization и finalization.