Понятие проекта. Структура проекта
Если вы загляните в папку, в которой хранится исходный код вашего приложения, вы увидите довольно много файлов. Эти файлы необходимы для того, чтобы работало ваше приложение. Именно поэтому мы советовали вам все файлы сохранять в одной папке, чтобы не потерять ни один файл.
Набор файлов, который хранит исходный код вашего приложения, называется проектом. На основе файлов проекта создается выполнимый файл (*.exe). Давайте рассмотрим, из каких основных файлов состоит проект.
Структура проекта изображена на рис.
![]() |
Рис. Структура проекта
Где
*.dfm содержит графическое представление формы;
*.pas – модуль Pascal;
*.res хранит ресурсы проекта;
*.dof хранит опции проекта.
Проект может содержать несколько форм, с каждой формой связаны два файла – с расширениями dfm и pas. Файл с расширением dfm – хранит графическое представление формы, именно сюда вы помещаете интерфейсные элемента, такие как кнопки, списки, поля редактирования. Файл с расширением pas – является модулем Pascal, именно там хранится программный код, связанный с формой, например обработчики событий формы. При этом каждому файлу dfm обязан соответствовать файл pas. Обратное неверно, т.е. модуль может не иметь связанной с ним формы, файла dfm.
С каждым проектом связан один файл с расширением dof, в котором хранятся опции проекта. А вот ресурсных файлов res может быть, вообще говоря, несколько, но, как правило, с каждым проектом связан один файл ресурсов, который хранит иконки, картинки, рисунки вашего приложения.
В своей папке вы обнаружите также файлы с расширением dcu. Эти файлы являются результатом компиляции модулей Pascal, они создаются каждый раз, когда компилируется проект. Значит, их хранение не является обязательным и они могут быть удалены.
Также можно не хранить файлы, расширение которых начинается со знака "~", например ~dfm, ~pas. Это файлы отката текстового редактора. Этими файлами можно воспользоваться, если испорчены основные файлы dfm и pas.
С каждым проектом связан один файл с расширением cfg – это файл конфигурации проекта.
Программа на Pascal, которая запускает приложение на выполнение, часто также называется проектом и хранится в файле с расширением *.dpr. Для доступа к этому файлу выполним меню Project | View Source.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Рассмотрим структуру программы. Ключевое слово program задает имя проекта (программы). Ключевое слово uses позволяет подключить к проекту формы и модули. А вот {$R *.RES} – это не комментарий, это опция компилятора, которая подключает к проекту ресурсный файл. Между операторами begin .. end располагается основной текст программы. Для каждого приложения создается глобальный объект Application. Этот объект отсутствует в палитре компонентов, недоступен он и на этапе разработки приложения. Но некоторые из его общедоступных (public) свойств могут быть установлены во время проектирования в диалоге задания опций проекта на страницах Forms и Application.
Метод Initialize – это первый метод, вызываемый для любого Delphi-приложения. Он инициализирует объект Application.
Метод CreateForm – загружает очередную форму в оперативную память.
Проект Delphi обычно состоит из нескольких вызовов метода CreateForm по количеству самозагружаемых (auto-create) форм. Приложение может создавать форму динамически во время выполнения с помощью того же метода CreateForm, но это не всегда требуется. По умолчанию первая созданная форма становится главной формой приложения.
Метод Run запускает приложение на выполнение и передает управление главной форме.
Задание для самостоятельной работы
1. Создайте новое приложение в Delphi
2. Сохраните его в отдельной папке
3. Откройте папку и посмотрите, из каких файлов она состоит
4. Измените приложение, например, добавьте несколько любых компонентов на форму
5. Сохраните приложение
6. Откройте папку и посмотрите, из каких файлов она состоит
7. Удалите ненужные файлы, т.е. такие которые не повлияют на работоспособность приложения
8. Запустите приложение на выполнение и убедитесь в его работоспособности.
Форма
Приложение может состоять из нескольких форм. Форма – это основной элемент интерфейса пользователя, который обеспечивает наиболее удобный вид представления, просмотра, редактирования данных и управления ходом выполнения приложения. С точки зрения пользователя, форма – это просто окно, посредством которого программа общается с пользователем. С точки зрения разработчика, форма – это объект класса TForm. С каждой формой связаны два файла: файл dfm – содержит графическое представление формы, файл pas – содержит ассоциированный с формой модуль Паскаля.
Добавление формы к проекту
Добавление формы к проекту осуществляется либо через меню File | New | Form, либо с помощью быстрой кнопки New Form кнопочной панели.
| |||
|
При этом открывается окно новой формы. Модуль новой формы добавляется в строку Uses файла проекта – dpr. Чтобы запомнить форму как часть проекта, сохраните ее в папке, где хранятся все файлы вашего приложения, с помощью меню File | Save.
Как мы уже говорили, с каждой формой связаны два файла: в одном находится графическое представление формы, другой содержит модуль Pascal, связанный с формой. Каждый из этих файлов открывается в своем окне. Для переключения между окнами используются кнопка кнопочной панели Toggle Form\Unit или клавиша F12.
Структура модуля Pascal
Модули введены в Turbo Pascal начиная с версии 4.0. Введение модулей явилось решающим шагом на пути его превращения в язык, пригодный для крупных разработок производственного и коммерческого назначения.
Модуль (Unit) в языке Turbo Pascal по определению считается отдельной программой. Модуль – это отдельно хранимая и независимо компилируемая единица в отличие от подпрограммы.
Модуль представляет собой набор программных ресурсов, предназначенных для использования другими модулями и программами. Ресурсы модуля можно разбить на две части – предназначенные для использования другими модулями и программами и объекты рабочего характера, используемые только процедурами и функциями данного модуля. В соответствии с этим модуль имеет две основные части, называемые интерфейсом и реализацией. В интерфейсной части (interface) сосредоточены описания объектов модуля, доступных другим программам; такие объекты называются видимыми вне модуля. Здесь должны быть представлены только заголовки процедур и функций, видимые для других программ, а их полные описания будут содержаться в разделе реализации.
В части реализации (implementation) помещаются рабочие объекты, называемые также невидимыми или скрытыми, а также реализации процедур и функций, используемых другими модулями.
В последующих версиях появились еще две части: initialization и finalization.
Часть initialization используется для инициализации данных, используемых модулем. Если приложение использует данный модуль, код в части initialization выполняется перед тем, как начнет выполняться само приложение.
Если для модуля необходимо выполнить, например освобождение ресурсов, занятых при инициализации объектов, перед тем как завершится приложение, используется часть finalization. Часть finalization следует за частью initialization, но перед конечным end.
Заголовок модуля состоит из ключевого слова Unit и идентификатора, который является именем модуля. Hапример:
Unit Unit1;
Interface
{ описание видимых объектов }
Implementation
{ описание скрытых объектов }
Initialization
{ операторы инициализации объектов модуля }
Finalization
{ очистка }
end.
Для доступа к объектам, процедурам и функциям другого модуля нужно указать имя этого модуля в операторе Uses.
Давайте рассмотрим структуру модуля, связанного с пустой формой.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
Ключевое слово Unit задает имя модуля. В интерфейсной части модуля с помощью ключевого слова Uses задаются внешние библиотеки, которые будут использоваться модулем. Ключевое слово type задает описание класса TForm1, который является наследником класса TForm. Ключевые слова private и public задают скрытые и общедоступные части класса соответственно. С помощью ключевого слова var задается переменная Form1 это объект класса TForm1.
В части implementation будут создаваться обработчики событий формы.
{$R *.dfm} – это не комментарий, а директива компилятора, которая говорит о том, что данный модуль связан с графическим представлением формы, файлом dfm. Не удаляйте эту директиву!
Как открыть форму
Форма открывается с помощью одного из своих методов: Show или ShowModal. Отличие методов состоит в том, что метод Show открывает обычное окно, а метод ShowModal открывает форму в режиме модального окна, т.е. окна, которое пользователь должен закрыть, прежде чем он сможет получить доступ к другим окнам. Например:
Form2.Show; где Form2 - имя открываемой формы.
Для того чтобы модуль вызывающей формы получил доступ к модулю вызываемой формы, нужно в Uses вызывающей формы добавить имя модуля вызываемой формы.
Напpимеp. Из Формы1 требуется открыть Форму2. С Формой1 связан модуль Unit1, а с Формой2 связан модуль Unit2. Нужно, чтобы модуль Unit1, связанный с Формой1 видел модуль Unit2, связанный с Формой2. Для этого необходимо в операторе Uses модуля Формы1, т.е. в Unit1, прописать имя модуля второй формы Unit2.
Unit Unit1 { Unit1 - модуль вызывающей Фоpмы1 }
implementaion
Uses ... , Unit2; { Unit2 - модуль вызываемой Фоpмы2 }
...
Этого же можно достичь, если, находясь в модуле Unit1, выполнить меню File | Use Unit. В результате в части implementaion модуля Unit1 появится объявление модуля Unit2.
Задание для самостоятельной работы
1. Создайте новое приложение.
2. Добавьте к нему новую форму
3. В главной форме приложения создайте кнопку, по которой будет вызываться новая форма.
4. Добавьте к приложению 5 новых форм. Откройте файл dpr и посмотрите, что он содержит.