Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пр_раб_02 - Структура проекта.doc
Скачиваний:
9
Добавлен:
09.05.2015
Размер:
447.49 Кб
Скачать

Практическая работа №2 структура проекта Delphi 7

Рассмотрим кратко структуру проекта Delphi 7 и содержание входящих в него файлов. Если выполнить команду File - New - Other, то на экране раскроется диалоговое окно New Items (рис.1).

Рис.1

При помощи этого окна можно создавать обычные приложения Windows, новые компоненты, консольные приложения, пакеты компонентов, новые формы, DLL-библиотеки и др.

Рассмотрим структуру проекта обычного приложения Windows, представляющего собой выполняемый ехе-файл. Этому типу проектов соответствует пиктограмма Application, расположенная на вкладке New диалогового окна New Items (см. рис.1).

1. Исходные файлы проекта Delphi 7

В состав проекта обычного приложения Windows, разрабатываемого в Delphi 7, обязательно входят файлы со следующими расширениями.

.dpr - главный файл проекта. Содержит исходный код инициализации приложения и создания форм.

.pas - файлы программных модулей, содержащих исходный код на языке Object Pascal. Для каждой формы, входящей в состав проекта, создается отдельный программный модуль. В исходном тексте такого модуля содержится объявление класса формы. При размещении на форме компонентов конструктор форм Delphi автоматически вносит необходимые изменения в объявление класса этой формы. То же самое происходит и при создании обработчиков событий. Таким образом, Delphi выполняет большой объем "черновой работы" по модификации исходного кода класса формы, позволяя разработчику сосредоточиться только на создании программного кода, определяющего функциональность формы.

.dfm - файлы форм. Практически все операции, выполняемые в конструкторе форм при визуальной разработке, записываются в файл формы соответствующего программного модуля. В этот файл помещаются конкретные значения свойств формы и ее компонентов, в отличие от самого модуля, в котором хранятся только объявления элементов формы и их программный код.

.res - файл ресурсов проекта. Содержит пиктограмму, которая затем сохраняется в выполняемом файле приложения, и другие ресурсы.

После сохранения и компиляции проекта, в одном каталоге с ним создается еще несколько файлов, которые являются вспомогательными.

Примечание

Файлы, расширение которых начинается с символа "~" (тильда), являются резервными копиями основных файлов. Эти копии соответствуют последнему сохранению внесенных в проект изменений.

Рассмотрим структуру проекта Delphi 7 на примере простого приложения, содержащего три кнопки и текстовое поле, разработанного в предыдущих разделах.

Главный файл проекта (.dpr)

Содержимое главного файла проекта Project1.dpr представлено в листинге 1.1. Для того чтобы открыть этот файл в редакторе исходного кода, необходимо выполнить команду Project - View Source.

Листинг 1.1. Главный файл проекта Project1.dpr

program Project1;

uses

Forms,

Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Предупреждение

За исключением редких случаев, непосредственно редактировать этот файл не требуется, так как при компиляции проекта это может привести к ошибкам. Кроме того, существуют некоторые ограничения для имен проектов и программных модулей: они должны начинаться с буквы и состоять только из букв, цифр и символов подчеркивания. Точки и пробелы в таких именах не допускаются.

Ключевое слово program

Ключевое слово program в первой строке файла проекта сообщает компилятору о том, что данная программа предназначена для создания выполняемого файла.

После него указывается имя проекта (в данном случае - Project1).

Раздел uses

В разделе uses перечисляются программные модули Object Pascal, которые система Delphi должна скомпоновать с данной программой при создании выполняемого файла. Модуль Forms, с которого в листинге 1.1 начинается перечень модулей проекта, - это одна из составных частей библиотеки визуальных компонентов (Visual Component Library - VCL) Delphi.

Назначение этого модуля, как видно из его названия, состоит в определении характеристик форм в приложениях, разрабатываемых в Delphi. Остальным модулям (файл проекта из листинга 1.1 содержит только один модуль – Unit1) соответствуют формы, созданные для конкретного проекта.

Здесь указывается имя модуля (Unit1), имя файла с исходным кодом этого модуля (Unit1.pas), а также имя формы, хранящейся в данном модуле (Form1). Имени формы соответствует значение свойства Name каждого объекта класса TForm в том виде, в котором оно отображается в инспекторе объектов Delphi.

Директива $R

Директива $R сообщает компилятору, что в проект нужно включить ресурс Windows, указанный в директиве. Символ звездочки, указанный в качестве имени файла, означает, что имя файла ресурса совпадает с именем файла проекта. Файл ресурсов (.res) создается автоматически при компиляции проекта.

Объект Application

Объект Application - это экземпляр класса TApplication. Он создается автоматически и предназначен для управления приложением в целом. Инициализация приложения начинается с вызова метода Application.Initialize.

После него последовательно для каждой формы вызывается метод Application.CreateForm. Этот метод "создает" формы, то есть загружает их в оперативную память. Если в проекте используется несколько форм, то непосредственно при инициализации приложения обязательно необходимо создавать только ту форму, которая является главной. Остальные формы можно создавать динамически, то есть в процессе работы приложения. Такой подход позволяет более рационально использовать системные ресурсы и ускоряет запуск приложений (особенно больших). Рассмотрим пример динамического создания форм.

Пример динамического создания форм

  1. Создайте в Delphi новый VCL Application-проект Project1.

  2. Разместите на нем 3 кнопки TButton и 1 поле редактирования TEdit (рис.3)

Рис.1.1

  1. Выполните команду File - New Form. В конструкторе форм будет создана новая форма Form2.

Рис.1.2

  1. Нажмите клавишу <F12>, чтобы перейти в редактор исходного кода проекта.

  2. В редакторе исходного кода перейдите на вкладку Project1, выполнив команду Project - View Source. В главный файл проекта будет добавлена ссылка на модуль Unit2, а вслед за формой Form1, при инициализации приложения, будет создаваться форма Form2.

  3. Для того чтобы отменить создание формы Form2 на этапе инициализации приложения, командой Project - Options раскройте диалоговое окно, и перейдите в нем на вкладку Forms, как показано на рис.1.2.

  4. Дважды щелкните мышью на форме Form2, чтобы перенести эту форму в перечень доступных форм, не создаваемых автоматически - список Available forms.

  1. Щелкните мышью на кнопке OK. Если теперь просмотреть исходный код главного файла проекта, то можно увидеть, что метод CreateForm вызывается только для формы Form1.

  2. Выполните команду File - Save и сохраните файл модуля Unit2 .pas в одном каталоге с остальными файлами проекта.

  3. Перейдите в редакторе исходного кода проекта на вкладку Unit1. Добавьте в операторе uses модуля Unit1 ссылку на модуль Unit2:

uses

Windows, ... , Unit2;

  1. Если этого не сделать, то модуль Unit1 не будет "видеть" модуль Unit2. Теперь нажмите клавишу <F12>, чтобы перейти в конструктор форм.

Примечание

Для просмотра списка форм можно выполнить одно из следующих действий:

  • воспользоваться командой View - Forms;

  • щелкнуть мышью на кнопке View Form панели инструментов View;

  • нажать комбинацию клавиш <Shift+F12>.

Для просмотра списка программных модулей можно выполнить одно из следующих действий:

  • воспользоваться командой View - Units;

  • щелкнуть мышью на кнопке View Unit панели инструментов View;

  • нажать комбинацию клавиш <Ctrl+F12>.

Если после этого в диалоговом окне View Form выделить один из элементов списка, и щелкнуть мышью на кнопке OK или просто дважды щелкнуть мышью на нужном элементе списка, то будет открыта соответствующая форма. Если то же самое выполнить в диалоговом окне View Unit - будет открыт соответствующий модуль.

  1. Выделите кнопку Button2 и перейдите в инспекторе объектов на вкладку Events.

  2. Щелкните мышью в поле события Onclick и удалите в нем ссылку на процедуру Button1Click.

  3. Дважды щелкните мышью в поле события Onclick. В результате будет создана процедура Button2Click.

Вставьте между ключевыми словами begin и end этой процедуры следующий программный код:

Application.CreateForm(TForm2, Form2);

Form2.ShowModal;

Form2.Free;

Процедура Button2Click выполняет следующие действия.

  • Первая строка предназначена для создания формы Form2.

  • Вторая строка отображает эту форму при помощи метода ShowModal.

  • Последняя строка удаляет форму из памяти методом Free.

Немного теории

Для отображения форм используется два метода: Show и ShowModal. Они отличаются тем, что после вызова метода Show приложение продолжает выполнять программный код вызывающего модуля, а в случае вызова метода ShowModal управление передается вызываемой форме. В случае использования метода Show можно переключаться между вызывающей и вызываемой формой и производить в них некоторые действия, а в случае использования метода ShowModal вызываемая форма "блокирует" работу приложения до тех пор, пока она не будет закрыта.

Последняя строка процедуры Button2Click вызывается для формы Form2 метод Free. Этот метод удаляет форму из памяти, освобождая выделенные для нее системные ресурсы. Если бы вместо метода ShowModal в данном примере использовался метод Show, то форма Form2 не отображалась, так как она удалялась бы сразу же после создания методом Free. Благодаря использованию метода ShowModal, форма Form2 удаляется из памяти только после того, как будет закрыта пользователем.

  1. Перейдите в конструкторе форм к форме Form2, и уменьшите ее размеры.

  2. Запустите приложение и щелкните мышью на кнопке Кнопка 2. В результате будет создана и отображена на экране форма Form2 (рис.1.3).

Рис.1.3

  1. Закройте форму Form2 и выйдите из приложения, например, щелчком мыши на кнопке Выход.

Метод Application, Run

Для возврата к содержимому главного файла проекта, перейдите на вкладку Project1 редактора исходного кода проекта. С метода Application.Run, собственно говоря, и начинается работа приложения. Он запускает цикл обработки сообщений, на котором построена работа программ. Приложение завершает работу при поступлении сообщения о его закрытии.

Файлы программных модулей (.pas)

Рассмотрим структуру файлов программных модулей на примере модуля Unit1, представленного в листинге 1.2.

Листинг 1.2.

unit Unit1

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Unit2;

type

TForm1 = class (TForm)

Button2: TButton;

Button3: TButton;

Button1: TButton;

Edit1: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Edit1.text := TButton(Sender).Caption;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Application.CreateForm(TForm2, Form2);

Form2.ShowModal;

Form2.Free;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;

end.

В этом листинге полужирным шрифтом выделены те фрагменты, которые должны быть вставлены вручную.

Примечание

Перенос строк в тексте программ на языке Object Pascal допускается только после разделительных знаков (точка, запятая, точка с запятой, двоеточие), операторов (:=, =, -, + и т.д), закрывающих скобок и зарезервированных слов (begin, end, then, else, or, and и т.д.).

Как видно из листинга 1.2, программный модуль состоит из двух разделов, обозначенных ключевыми словами interface и implementation.

В интерфейсном разделе (между ключевыми словами interface и implementation) указываются элементы программного модуля, доступные для других модулей и программ. Здесь объявляются функции, процедуры, переменные, константы и типы.

В данном примере в интерфейсном разделе указаны ссылки на подключаемые модули (включая модуль формы Form2 - Unit2), а также автоматически созданные Delphi объявления класса формы Form1.

Обратите внимание на объявление переменной экземпляра формы:

var

Form1: TForm1;

Здесь объявляется переменная Form1 типа TForm1.

Тип TForm1 - это созданный при помощи конструктора форм Delphi класс, производный от класса TForm. Переменная Form1 инициализируется оператором Application.CreateForm, который был рассмотрен выше. Так как эта переменная объявлена в интерфейсном разделе, то к ней можно обращаться и модифицировать ее значение из главного файла проекта, а также из других модулей. Для того чтобы можно было обращаться к переменной Form1 из других модулей, в разделе uses этих модулей должна быть указана ссылка на модуль Unit1.

В разделе реализации, после ключевого слова implementation, располагается программный код модуля.

Все операторы, помещаемые в раздел реализации, доступны только внутри данного программного модуля. Для того чтобы получить доступ к тем или иным элементам извне модуля, необходимо поместить соответствующие объявления в интерфейсный раздел этого модуля. Типичным является размещение объявления функции в разделе interface, а операторов этой функции в разделе implementation.