Для создания нового проекта следует выполнить команду: File – New и выбрать вариант Application (Приложение).
Не забудьте, что приложение в Delphi состоит из нескольких файлов. Файл проекта имеет расширение *.dpr, файл модуля имеет расширение *.pas, которых в проекте может быть несколько, кроме того, приложение может содержать еще ряд файлов, например, файлы форм .dfm (.xfm), текстовые файлы, файлы рисунков, используемых в проекте и т.д. Поэтому каждый проект следует сохранять в отдельной папке (особенно если вы не изменяете стандартные имена Project и Unit).
При первом сохранении Delphi спросит имя файла сохраняемого модуля (*.pas), а затем — имя файла проекта (*.dpr). Их надо задать, выбрать нужную папку и сохранить (выбрать ОК). Имена всех дополнительных файлов совпадают с именем проекта или модуля и сохраняются автоматически. Так что при сохранении надо дать имена только файлу проекта и модуля. Но Delphi не допускает одинаковых имен модулей и проектов. Поэтому задаваемые имена файлов должны быть разными.
Для повторного сохранения проекта в целом следует использовать команду Save All. Команда Save сохраняет только текущий модуль, с которым работает пользователь (*.pas).
Для открытия ранее созданного проекта следует использовать команды:
1) File - Reopen (если работа проводилась недавно) или
2) File - Open Project, следует открывать файл проекта *.dpr(нельзя открывать файл модуля *.pas, т.к. без файла проекта он не компилируется и на исполнение не запускается!).
Основные форматы файлов в Delphi:
· *.dpr - файл проекта,
· *.pas - файл модуля имеет расширение, модулей в проекте может быть несколько. Каждой создаваемой форме соответствует текстовый файл модуля.
· файл формы *.dfm (*.xfm) - это двоичный или текстовый файл для хранения информации о форме;
· *.res - бинарный файл ресурсов, используемых в приложении;
· *.bpl - файл подключаемой в процессе разработки динамической библиотеки;
· *.bpg - файл группы файлов - создается при работе с группой проектов;
· *.dfo - файл параметров проекта, хранит установки параметров проекта;
· *.exe - исполняемый файл приложения;
· *.dcu - объектный файл модуля - откомпилированный объектный файл модуля, который компонуется в исполняемый файл;
· *.~dp, *.~df, *.~pa -файлы резервных копий и т. д.
Структура файлов головной программы (*.dpr) и модуля (*.pas)
При проектировании приложения, Delphi автоматически создает полный код головной программы (например, Project1.dpr) и структуру отдельных модулей (например, unit1.pas). В модули вручную добавляется только код обработки различных событий. Но головную программу, как правило, не корректируют и даже не просматривают ее код.
Для просмотра текста головной программы проекта (*.dpr), модуль которого открыт в окне Редактора Кода, надо выполнить команду Project - View Source. Головной файл загрузится в окно Редактора Кода. Или при загруженном проекте перейти на вкладку Project1 в окне редактора кода.
Головная программа проекта имеет следующую структуру:
Program <имя>;
<Объявления подключаемых модулей, а также объявления локальных
для головного файла, типов, классов, констант, переменных,
описания локальных функций и переменных>
begin
<операторы тела программы>
end.
В Delphi головной файл обычно содержит только операторы инициализации приложения, создания форм и запуска приложения.
Типичный головной файл Project1.dpr в Delphi имеет вид:
program Project1;
uses Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form.2},
{$R *.RES}
{Здесь можно поместить описания каких-то констант, переменных, функций, процедур. Все это будет доступно только в пределах данного файла.}
begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Имя программы совпадает с именем файла, в котором сохранен проект. Это же имя присваивается выполняемому файлу приложения (*.exe).
После заголовка в тексте программы располагается предложение uses. В этом предложении перечисляются модули, загружаемые программой — системные и модули приложения (в частности, модули всех форм). В приведенном примере подразумевает, что в проекте созданы две формы с именами Form1 и Form2 в модулях с именами Unitl и Unit2. Названия форм включаются в текст в виде комментариев.
Следующая строка текста — {$R *.RES} представляет собой директиву компилятора. Затем после ключевого слова begin и до последнего завершающего программу оператора end с точкой (end.) записано тело программы.
Первый выполняемый оператор в теле программы инициализирует приложение, два следующих — создают объекты форм Form1 и Form2, последний — начинает выполнение приложения.
7.4. Структура модуля (*.pas)
Имя модуля также совпадает с именем соответствующего файла модуля (*.pas). Каждый модуль в общем случае имеет следующую структуру:
unit <имя модуля>;
interface // Открытый интерфейс модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей.}
implementation // Реализация модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
initialization // не обязательный
<Операторы, выполняемые один раз при первом обращении к модулю>
finalization // не обязательный
<Операторы, выполняемые при любом завершении работы модуля>
end.
Раздел interface представляет собой внешний интерфейс модуля. Поэтому подключаемые в нем модули, объявленные типы, классы, константы, переменные, функции и процедуры доступны внешним модулям, обращающимся к данному модулю.
Раздел implementation представляет собой реализацию модуля. Все подключаемые в нем модули, объявленные типы, классы, константы, переменные, функции и процедуры доступны только в пределах данного модуля. Основное тело модуля составляют коды, реализующие объявленные функции и процедуры.
Раздел initialization включает в себя операторы, которые выполняются только один раз при первом обращении программы к данному модулю. Этот раздел не является обязательным, В нем могут помещаться какие-то операторы, производящие начальную настройку модуля.
При наличии в программе нескольких модулей, содержащих разделы initialization, последовательность выполнения операторов этих разделов определяется последовательностью указания соответствующих модулей в операторах uses.
Например, если в головной программе имеется оператор
uses unit1, unit2, ...
то сначала будет выполняться (если он есть) раздел initialization модуля unit1, а затем раздел initialization модуля unit2.
Раздел finalization включает в себя операторы, которые выполняются только один раз при любом завершении работы программы, нормальном или аварийном. Этот раздел не является обязательным. В нем могут помещаться какие-то операторы, производящие зачистку «мусора» — удаление временных файлов, освобождение ресурсов памяти и т.п. Введение раздела finalization не разрешается, если в модуле нет раздела initialization. Последовательность выполнения операторов разделов finalization различных модулей обратная той, которая была описана выше для разделов initialization.