Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

11.2. Характеристика проекта

В этом разделе рассматриваются: состав проекта, файл проекта, файлы формы, файлы модулей, файл ресурсов и параметры проекта.

Состав проекта

Создаваемое в среде С++ Builder приложение состоит из нескольких эле­ментов, ("бьединенных в проект. В состав проекта входят следующие элемен­ты (в скобках указаны расширения имен файлов):

  • исходный код проекта (срр);

  • исходный код модулей форм и модулей (срр);

  • заголовочные фай. ы модулей форм и модулей (h);

  • представления форм (dfm — для Windows, xfm — кроссплатформенный вариант);

  • параметры проекта (bpr);

  • параметры среды (cfg);

  • описание ресурсов (res).

Взаимосвязи между отдельными частями (файлами) проекта показаны на рис. 11.4.

Кроме приведенных файлов, автоматически могут создаваться и другие файлы, например, резервные копии файлов: -dp — для фай чоь с расширени­ем dpr; ~ср — для файлов с расширением ср: ~h — для файлов с расширением .h. При создании группы проектов создается текстовый файл с расширением .bpg; при работе с пакетами создаются двоичные файлы с расширениями .bpl и .bpi.

При запуске С++ Builder автоматически создается новый проект с именем Projeci.1, отображаемым :t заголовке главного окна С++ Builder. Этот проект имеет в своем составе одну Лорму Forml, название которой видно в окне Формы. Разработчик может изменить предлагаемое по умолчанию имя про­екта. а также установить параметры среды таким образом, что после 3ai рузки

Рис. 11.4. Связи между файлами проекта

С++ Builder будет авт омат ически загружаться приложение, оазработт a кото рпго выполнялась в последний раз.

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

Головной файл проекта

Головной файл проекта является цент ральным файлом проекта, имеет рас­ширение .срр и представляет собой собственно программу. Для приложения, имеющего в составе одну форму, головной файл проекта имеет следующий иид:

//

//Директивы препроцессора include <vcl h> #pragma hdrstop

//

// Мгжрог.ы USEFILECreadme.txt"); USEFORMfmain.cpp", FormMain); USER CS( "scrollba. res");

//

// Главная функция WinMain

WINAPI WinMain(HINSTANCE, HINSTANCE, LPPTR, int) {

try {

Application->lnitialize();

Application->CreateForm( classid(TFormMain), &FormMain);

Application->Run();

}

catch (Fxception &exception) {

Application - >Sf .owException( &excepiion);

}

return 0;

}

//

Имя проекта (программы) совпадает с именем головного фай та проекта и указывается при сохранении этого фай па на диске, первоначально это имя Project"!. То же имя имеют файлы ресурсов и параметров проекта, при пере­именовании файла проекта данные файлы переименовываются автоматичес­ки.

Сборка всего проекта выполняется при компиляции фай. ia проекта. При этом имя создаваемого приложения (ехе-файл) ичи динамически загружае­мой библиотеки (dll-файл) совпадает с названием файла проекта. В дальней­шем мы будем подразумевать, что создается приложение, а не динамически загружаемая библиотека.

В начале головного фай ла проекта содержатся различные директивы пре­процессора. В частности с помощью директивы #include <vcl.h^> выполняет­ся подключение заготовочного файла с объявлениями, используемыми в биб­лиотеке визуальных компонентов.

Далее следуют макросы, с помощью которых выполняется подлючение (Ьайлов ресурсов и форм. В частности, макрос USEFORM("Main.cpp", FormMain) выполняет подключение модуля формы, расположенной в фай гте с именем Мат.срр и имеющей имя FormMain. В свою очередь, макрос USERES('lscrollba.res") выполняет поключение файла ресурс op scrollba.res.

Далее расположена главная функция приложения — WinMain. Первый и второй параметры этой функции являются дескрипторами данною экземп ляра приложения и предыдущего экземпляра приложения (если одновремен­но выполняется несколько таких приложений) Третий параметр служит ука зателем на строку с параметрами, передаваемыми приложению через командную строку.

Прет рамма проекта содержит три опера гора, выполняющих инициализа­цию приложения (Applies on->lrniianze();), создание формы (Applicatu >п- >CreateForm( olassid(TFormMain), &FormMain);) Forml и запуск прило­жения (Appncation->Run();). Названные операторы размещены в блоке try, за которым следует блок catch. Сделано это с целью обработки исключений, возможных при выполнении приложения. При этом используется стандарт­ный обраоотчик исключений с применением функции ShowException.

При выполнении разработчиком каких-либо операций с проектом С++ Builder формирует код файла проекта автоматически. Например, при добав лении новой формы в файл проекта добавляв >т< ч две строки кода, относящи­еся к этой форме, а при исключении формы из проекта эти строки автомати­чески исключаются. При необходимости программист может вносить изме­нения ь файл проекта самостоятельно, однако подобные действия могут разрушить целостность проекта и поэтому обычно выполняют! i только опыт ными программистами. Отметим, что некоторые операции, например, созда­ние обработчика события для объекта Application, системой С++ Builder ав томатически не выполняются и требуют самостоятельного кодирования в файл° проекта.

Отображение :сода головного файла проекта в окне Редактора кода задает­ся командой Project\View Source (Проект\Просмотр источника).

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

Файлы формы

Для каждой формы в с< »ставе проекта автома гически со щаются файл пред­ставления формы (расширение .dfm) и файлы модуля фоомы: заголовочный фай I (расширение .h) и файл исходного кода формы (расширение .срр).

Файл представления формы является ресурсом С++ Builder и содержит характеристики формы и ее компонентов. Разработчик обычно yj |равляет этим файтом через окна Формы и Инспектора объектов. При конструировании формы в файл опи( ания автоматически вносятся соответс твующие измене­ния. Содержимое файла представления формы определяет ее вид. При необ­ходимости можно отобразить этот файл на экране в текстовом виде, что вы полняется командой View as Text (Просмотреть как текст) контекстн» iro меню формы. При этом окно Формы пропадает с экрана, а содержимое файла пред­ставления формы открывается в окне Редактора кода и доступно для про­смотра и редактирования. Например, файл представления формы, включаю­щей кнопку (object Button 1) и одностроиный редактор (object Editl), содержит следующий текст: object Form 1: TForm 1 Left =192 Top = 133 Width = 544 Height = 375 Caption = 'Forml' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.He.ght = -11 Font.Name = 'MS Sans Serif*

Font.Style = [] OldCreateOrder = False PixelsPerlnch = 96 TextHeight= 13 object Button 1: TButton Left = 144 Top = 40 Width = 57 Height = 49 Caption = 'Buttonl' TabOrder = 0 end

object Editl: TEdit Left = 224 Top = 136 Width = 57 Height = 21 TabOrder = 1 Text = 'Ed.tr end end

Чтобы вернуться обратно от просмотра текстового вида фай. ia представ дения к просмотру внешнего вида формы, нужно выполнить команду View as Form (Просмотреть как форму) также контекстною меню формы

Файл представ чения содержит перечень всех объектов формы, включая саму форму, а также свойства этих объектов. Для каждого объ< кта указывает­ся его тип; для формы ее тип (класс) TForm 1 описывается в модуле этой фор­мы. Если в строчке Caption = 'Forml', определяющей заголовок формы, вме сто Forml ввести, например, текст Первая форма, то заголовок формы изменится на новый. Однако на практике подобные действия обычно выпол­няются в окне Инспектора объектов.

Повторное открытие окна формы выполняется командой View\Forms (Просмотр\Формы) или комбинацией клавиш <Sbift>+<F12>, после чего открывается диалоговое окно View Form (Просмотр форм), в списке которо­го и выбирается нужная форма.

Одновременно можно отобразить на экране несколько форм. Для зак­рытия того или иного окна Формы нужно выполнить команду File\Close (Файл\3акрыть) или щелкнуть мышью на кнопке закрытия соответству­ющего окна.

Заголовочный файл модуля формч содержит описание класса формы. На­пример, для формы, на которой размещены кнопка (Buttonl), надпись (Label 1) и однострочный редактор (Editl), заголовочный файл модуля фор­мы содержит следующий код:

/I

#ifndef Unit 1Н #detine UnitlН

//

#inclurie <Classes.hpp> #include <Controls.hpp> «include <StdCtrls.hpp> #include < Forms.hpp>

//

class TForml : public TForm{

published:// IDE-manaqed Components

TButton *Button1;

TLabel * Label1;

TEdit*Edit1;

void _ fastcall Button1 Cnck(TOhject *Sender); private.// User declarations public:// User declarations

_ fastcall TForml (TComponent* Owner);};

//

extern PACKAGE TForml *Form1;

//

#endif

В начале заголовочного файла содержатся директивы препроцессора, под­ключаемые автоматически. При необходимости соответствующие директи­вы разработчик может добавлять вручную. Далее следует описание класса формы (в нашем примере TForml). В разделе. _published содержатся авто­магические добавляемые о о ьявления помещенных в форму компонентов (Button 1, Label 1 и Edit I) и обработчиков событий для них (Button 1 Click). В разделах private (собственный) и public (общедоступный) разработчик мо­жет помещать свои объявления типов, переменных и функций. Кроме того, в разделе public находится автоматически включенный прототип конструк­тора формы (_fastcall TForml (TComponent* Owner);). Объявления, раз­мещенные в разделе private, доступны только в пределах данного модуля; объявления, размещенные в разделе public, доступны для других классов и модулей. Далее размещено автоматически подключенное предложение PACKAGE, которое выходит за рамки нашего рассмотрения.

Файл исходного кода фор кы, называемый также фай чом реали \ации, со­держит1 директивы препроцессора, об ьявления типов и переменных, а так­же исходный код обработчиков событий, которые определяют функциональ­ность приложения. Файл Dea тизации, к поимеру, может иметь следуюший вид:

//

//Директивы препроцессора #include<vcl.h> #pragma hdrstop «include "Unitl.h"

//

#pragma package( smartJnit) #pragma resource "*.dfm" // Объявление формы как обт екта TForml *Form1;

//

// Вызов конструктора формы fastcall TForm1: :TForm1 (TComponent* Owner)

: TForm (Owner){

}

// Место размещения объявлений типов // и переменых,описаний функций

//

//Обработчик еобытия нажатия кнопки Buttonl

void _fastcall TForml:: Button 1Click(TObject *Sendor){

Editl ->T3Xt = "0"; }

/I

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

С++ Builder автоматически создает файлы модуля формы при добавлении новой формы. По умолчанию к проекту добавляется новая форма типа TForm, не содержащая компонентов.

При размещении в форме компонентов, а также при создании обработчи­ков событий в модуль формы вносятся соответствующие изменения. При этом часть этих изменений С++ Buildei выполняет автоматически, а часть пишет разработчик. Обычно все действия paaj 1аботчика, связанные с программиро­ванием, выполняются именно в модулях форм.

Тексты файлов модулей форм отображаются it редактируются с помощью Редактора кода. Открыть файл модуля формы можно в стандартном окне от­крытия Лайла (команда File\Open (Файл\Открыть)) или в диалоговом окне

View Unit, открываемом командой View\Units (Просмотр\Модули) или на­жатием комбинации клавиш <Ctrl>+<F12>. В окне открытия файла модуля формы можно выбрать также файл проекта. После выбора нужного модуля (или проекта) и нажатия кнопки ОК его текст появляется на отдельной стра­нице Редактора кода.

Если выбран модуль формы, то в окне Редактора кода первоначально ото­бражается содержимое файла реализации формы (например, Unit 1.срр). Что­бы перейти к отображению содержимого заголовочного файла этого же мо­дуля формы, достаточно в нижней части окна Редактора кода выбрать вкладку с названием Unitl .h (см. рис. 11.5).

Отметим, что файлы каждой формы (представления и модуля) имеют оди­наковые имена, отличные от имени файла проекта.

g Unitl.срр

BED

Unitl.h | UnR2.cpp |

- ; : •

#ifndef UnitlH Sdefine UnitlH

1

^include <Cla3ses.hpp> #include <Controls.hpp> ^include <StdCtrIs.hpp> Uinclude <Forws.hpp> / j

J

Щ'.

±L

-J "

T."■• > ' -\-y-~ JJS,iv. Г." ■ *

V'VVV*.a iVV'i ✓VV % ✓ . ч v

л « *;•.-<* У. ■ !•>. • *

±A

17: 63

ГЧ

Modified insert

\U nitl. cpp\UM h fpiagram /

— - Uj

Л

Рис. 11.5. Вид заголовочного файла модуля формы в окне Редактора кода

Файлы модулей

Кроме модулей в составе форм, при программировании можно исполь­зовать и отдельные модули, не связанные с какой-либо формой. Они офор­мляются по обычным правилам языка С++ и сохраняются в отдельных фай­лах. Для подключения модуля его имя указывается в директиве препроцессора #include того модуля или проекта, который использует сред­ства этого модуля.

В отдельном модуле можно и полезно размещать процедуры, функции, константы и переменные, общие для нескольких модулей проекта.

Файл ресурсов

При первом сохранении проекта автоматически создается файл ресурсов (расширение .res) с именем, совпадающим с именем файла проекта. Файл ресурсов может содержать следующие ресурсы:

  • значки;

  • растровые изображения;

  • курсоры.

Перечисленные компоненты являются ресурсами Windows, поскольку они разработаны и интерпретируются в соответствии со стандартами этой опера­ционной системы.

Первоначально файл ресурсов содержит значок проекта, которым по умол­чанию является изображение (Ъакела. В дальнейшем его можно изменить или заменить.

Для работы с файлами ресурсов в состав С++ Builder вк тючен графичес кий редактор Image Editor версии 3.0, вызываемый командой Tools\lmage Editor (Средсгва\Редактор изображений).

Файл ресурсов имеет иерархическую структуру, в которой рес> рсы разби­ты на группы, и каждый ресурс имеет уникальное в пределах группы имя. Имя ресурса задается при его создании и в последующем используется в при­ложении для доступа к этому ресурсу. Значок прое кта находится в группе Icon и по умолчанию имеет имя MAINICON.

Кроме файла с расширением res, объедини ющего несколько ресурсов, ре­дактор Image Editor также позволяет работать с файлами, содержащими сле­дующие ресурсы (в скобках указано расширение имени фай ia):

  • значки компонентов (dcr);

  • растровые изображения (bmp);

  • значки приложений (ico);

  • курс* |ры (сиг).

Параметры проекта

Для установки параметров проекта используется окно параметров проек­та (Project Options), открываемое командой Project\Options (Проект\Пара- метры) или нажатием комбинации клавиш <Shift>+<Ctrl>+<Fl 1>. Пара­метры разбиты на группы, каждая из которых располагае гея в окне параметров проекта на сьоей странице (рис. 11.6).

После установки отдельных параметров С++ Builder автоматически вно­сит нужные изменения в соо гветствующие файлы проекта. Так, параметры из страниц Forms и Application вносятся в файлы проекта и ресурсов, а па­раметры из страниц Compiler и Linker — в файл параметров проекта.

Ниже для примера приводятся фрагменты файла параметров проекта.

<IDEOPTIONS>

[Version Info]

/ /

lncludeVerlnfo=0

DLL=0

Locale=1049

CodePage=1251

[Debugging]

DebugSourceDirs^$(BCB)\source\vcl

Ш|

[Parameters] RunParams= Launcher= Usel_auncher-"0

[Compiler] SI iowlnfoMsgs=0 LinkDebugVcNO LinkCCLIB-0

Project Options for Projectl.exe

Version Infn j Packages ] Tasm CORBA j Codeuuard Pasc< I Luiker Advanced Linker Pirectories/ConHition-ih

Form- Application Compiler Advanced Compiler С++

Menibei pointers.- —

(* All case? С Multiple inheritance С Single inheritance Smallest

Г" Honor member precirion

Cumpatibility

Г Dun't restrirt roi loop scope Г Don't mangLwode modifiers

- Genjial

p" Zero '^ngth ';mpty base classes" [7 Zero lengin ciiiptu clasc members ~ Template:

Г Extern*!

Exception handling

F Enable RTTI f7 Enable exception--" Г Location informatio' W Destiuctui cleanup Г Fast exc option prologs

Mailables

<• Smart С External С Local С 'ublic

Compile mode —

Г Force С++rompilc

OK

Cancel

Help

Г ЩаиШ

Рис. 11.6. Окно параметров проект а

Как видим, фай i параметров проекта представляет собой текстовый файл, в котором построчно записаны параметры и их значения.