Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
5339
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать
F o r m M a i n )
с именем

11. Borland С++ Builder

373

{catch (Exception &exception)

Application->ShowException(&exception);

}

return 0;

}

//

Имя проекта (программы) совпадает с именем головного файла проекта и указывается при сохранении этого файла на диске, первоначально это имя P r o j e ct 1. То же имя имеют файлы ресурсов и параметров проекта, при переименовании файла проекта данные файлы переименовываются автоматически.

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

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

Далее следуют макросы, с помощью которых выполняется подлючение файлов ресурсов и форм. В частности, макрос USEFORM("Main.cpp", выполняет подключение модуля формы, расположенной в файле M a i n . с р р и имеющей имя F o r m M a i n . В свою очередь, макрос

U S E R E S ( " s c r o l l b a . r e s " ) выполняет поключение файла ресурсов scrollba . res . Далее расположена главная функция приложения — WinMain. Первый и второй параметры этой функции являются дескрипторами данного экземпляра приложения и предыдущего экземпляра приложения (если одновременно выполняется несколько таких приложений). Третий параметр служит указателем на строку с параметрами, передаваемыми приложению через

командную строку.

Программа проекта содержит три оператора, выполняющих инициализацию приложения ( A p p l i c a t i o n - > l n i t i a l i z e ( ) ; ) , создание формы ( A p p l i c a t i o n - > C r e a t e F o r m ( c l a s s i d ( T F o r m M a i n ) , & F o r m M a i n ) ; ) F o r m l и запуск приложения ( A p p l i c a t i o n - > R u n ( ) ; ) . Названные операторы размещены в блоке try, за которым следует блок c a t c h . Сделано это с целью обработки исключений, возможных при выполнении приложения. При этом используется стандартный обработчик исключений с применением функции ShowException.

При выполнении разработчиком каких-либо операций с проектом С++ Builder формирует код файла проекта автоматически. Например, при добав-

3 7 4 Часть 3. Современные СУБД и их применение

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

Отображение кода головного файла проекта в окне Редактора кода задает-

с я к о м а н д о й P r o j e c t \ V i e w S o u r c e ( П р о е к т \ П р о с м о т р и с т о ч н и к а ) .

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

Файлы формы

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

Файл представления формы является ресурсом С++ Builder и содержит характеристики формы и ее компонентов. Разработчик обычно управляет этим файлом через окна Ф о р м ы и И н с п е к т о р а о б ъ е к т о в . При конструировании формы в файл описания автоматически вносятся соответствующие изменения. Содержимое файла представления формы определяет ее вид. При необходимости можно отобразить этот файл на экране в текстовом виде, что выполняется командой V i e w a s Text ( П р о с м о т р е т ь как т е к с т ) контекстного меню формы. При этом окно Формы пропадает с экрана, а содержимое файла представления формы открывается в окне Редактора кода и доступно для просмотра и редактирования. Например, файл представления формы, включающей кнопку ( o b j e c t B u t t o n 1 ) и однострочный редактор ( o b j e c t E d i t 1 >, содержит следующий текст:

object Forml: TForml Left = 192

Top = 133

Width = 544

Height = 375 Caption = 'Forml'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11

Font.Name = 'MS Sans Serif

/ I. Borland С++ Builder

375

Font.Style = [] OldCreateOrder = False PixelsPerlnch = 96 TextHeight = 13

object Button 1: TButton

Left = 144

Top = 40

Width = 57

Height = 49 Caption = 'ButtonV TabOrder = 0

end

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

end

Чтобы вернуться обратно от просмотра текстового вида файла представления к просмотру внешнего вида формы, нужно выполнить команду V i e w as F o r m ( П р о с м о т р е т ь как ф о р м у ) также контекстного меню формы.

Файл представления содержит перечень всех объектов формы, включая саму форму, а также свойства этих объектов. Для каждого объекта указывается его тип; для формы ее тип (класс) T F o r m 1 описывается в модуле этой фор-

мы. Если в строчке C a p t i o n = ' F o r m l ' ,

определяющей заголовок формы, вме-

сто F o r m l ввести, например, текст

Первая форма, то заголовок формы

изменится на новый. Однако на практике подобные действия обычно выполняются в окне Инспектора объектов.

Повторное открытие окна формы выполняется командой V i e w \ F o r m s ( П р о с м о т р \ Ф о р м ы ) или комбинацией клавиш <Shift>+<F12>, после чего открывается диалоговое окно View F o r m ( П р о с м о т р ф о р м ) , в списке которого и выбирается нужная форма.

Одновременно можно отобразить на экране несколько форм. Для закрытия того или иного окна Формы нужно выполнить команду F i l e \ C l o s e ( Ф а й л \ 3 а к р ы т ь ) или щелкнуть мышью на кнопке закрытия соответствующего окна.

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

376 Часть 3. Современные СУБД и их применение

И

#ifndefUnit1H

#define UnitlH

//

#include <Classes.hpp>

#include

<Controls.hpp>

#include

<StdCtrls.hpp>

#include <Forms.hpp>

//

 

 

class TForml : public TForm

{

 

 

published:

/ / IDE-managed Components

TButton * Button 1;

TLabel* Labell;

TEdit

*Edit1;

void _fastcall Button 1Click(TObject *Sender);

private:

 

/ / User declarations

public:

 

/ / User declarations

_fastcall TForml (TComponent* Owner);

};

 

 

//

 

 

extern PACKAGE TForml *Form1;

//

 

 

#endif

 

 

В начале заголовочного файла содержатся директивы препроцессора, подключаемые автоматически. При необходимости соответствующие директивы разработчик может добавлять вручную. Далее следует описание класса формы (в нашем примере T F o r m l ) . В разделе p u b l i s h e d содержатся автоматические добавляемые объявления помещенных в форму компонентов

( B u t t o n 1, L a b e l l и E d i t l ) и обработчиков событий для них ( B u t t o n 1 C l i c k ) .

В разделах private (собственный) и public (общедоступный) разработчик может помещать свои объявления типов, переменных и функций. Кроме того, в разделе public находится автоматически включенный прототип конструк-

тора формы ( f a s t c a l l T F o r m l ( T C o m p o n e n t * O w n e r ) ; ) . Объявления, раз-

мещенные в разделе private, доступны только в пределах данного модуля; объявления, размещенные в разделе p u b l i c , доступны для других классов и модулей. Далее размещено автоматически подключенное предложение P A C K A G E , которое выходит за рамки нашего рассмотрения.

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

/ I. Borland С++ Builder

377

//

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

#pragma hdrstop

#include "Unitl .h"

//

#pragma package(smart_init) #pragma resource "*.dfm"

/ / Объявление формы как объекта

TForml *Form1;

//

/ / Вызов конструктора формы

fastcall TForm 1::TForm 1 (TComponent* Owner) : TForm(Owner)

{

}

// Место размещения объявлений типов

// и переменых.описаний функций

ц

/ / Обработчик события нажатия кнопки Button 1

void fastcall TForml::Button 1Click(TObject *Sender)

{

Edit1->Text = "0";

}

//

В начале файла реализации модуля формы содержатся автоматически включаемые директивы препроцессора. При необходимости разработчик может добавлять свои директивы препроцессора, к примеру, для подключения других модулей. В тело функции вызова конструктора формы можно добавлять операторы, реализуемые при создании формы. Впрочем, часто для этих целей создается обработчик события O n C r e a t e для формы.

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

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

Тексты файлов модулей форм отображаются и редактируются с помощью Редактора кода. Открыть файл модуля формы можно в стандартном окне открытия файла (команда F i l e \ O p e n ( Ф а й л \ О т к р ы т ь ) ) или в диалоговом окне

378

Часть 3. Современные СУБД и их применение

V i e w

Unit, открываемом командой V i e w \ U n i t s ( П р о с м о т р \ М о д у л и ) или на-

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

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

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

g Unit 1.срр

 

 

ГЛпТх1|

Unit1.hUnit2.cppj

 

 

ftifndef

U n i t l H

 

 

« d e f i n e

U n i t l H

 

 

/ /

 

 

 

# i n c l u d e

<C l a 3 s e s

. hpp>

 

# i n c l u d e

< C i j n t . r o I s . hpp;

 

# i n c l u d e < S t d C t r I s . h p p :

 

# i n c 1 u d e

<Fоritis . hp p>

 

/ /

 

 

 

17:" 63 jModified

[insert

|\UnitlTcpp\Unit1 .h/i^ram7~

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

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

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

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

I c o n
3.0,
T o o l s \ l m a g e

/ I. Borland С++ Builder

379

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

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

значки;

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

курсоры.

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

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

Для работы с файлами ресурсов в состав С++ Builder включен графический редактор Image Editor версии вызываемый командой

E d i t o r ( С р е д с т в а х Р е д а к т о р и з о б р а ж е н и й ) .

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

и по умолчанию имеет имя M A I N I C O N .

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

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

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

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

курсоры (сиг).

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

Для установки параметров проекта используется окно параметров проекта (Project Options), открываемое командой P r o j e c t \ O p t i o n s ( П р о е к т \ П а р а - м е т р ы ) или нажатием комбинации клавиш <Shift>+<Ctrl>+<Fl 1>. Параметры разбиты на группы, каждая из которых располагается в окне параметров проекта на своей странице (рис. 11.6).

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

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

<IDEOPTIONS> [Version Info]

380

Часть 3. Современные СУБД и их применение

lncludeVerlnfo=0

DLL=0

Locale=1049

CodePage=1251

[Debugging]

DebugSourceDirs=$(BCB)\source\vcl

[Parameters]

RunParams=

Launcher= Usel_auncher=0

[Compiler]

ShowlnfoMsgs=0

LinkDebugVcl=0

LinkCGLIB=0

P r o j e c t

O p t i o n s

for

P r o j e c t l . e H e

 

 

 

 

 

 

Version Info

j

Packages

J Tasm

j

CORBA

j

CodeGuard

1 Pascal

 

j

Linker

j Advanced Linker

]

Directories/Conditionals

Forms

j

Application

|

Compiler

J

Advanced Compiler

С++

Member pointers

 

— — ~

~ Templates —

r - —

(•All cases

 

 

 

 

Г

External

 

 

 

С

Multiple inheritance

 

 

" Exception handling

______

С

Single inheritance

 

 

 

 

p

Enable RTTI

 

 

С

Smallest

 

 

 

 

 

 

 

 

 

 

P7 Enable exceptions

 

 

Г

Honor member precision

 

 

 

Г

Location information

 

 

 

 

 

 

 

 

 

г- Compatibility —

 

 

 

 

J7

Destructor cleanup

Г

fion't

restrict for loop scope

 

Г Fast exception prologs 1

 

 

 

 

 

 

Г

Dont mangle £ode modifiers

Virtual tables — ~

 

• General—

 

 

 

-

(•

Smait

С

External

 

 

 

С

Local

С

public

f 7 gero length empty base classes

 

 

 

 

 

 

(7 Zero length empty class members

- Compile mode—

 

 

 

 

 

 

 

 

 

 

Г*

Force С++compile

 

 

 

 

 

 

 

 

 

OK

 

 

Cancel

 

Help

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

/ I. Borland С++ Builder

381

Как видим, файл параметров проекта представляет собой текстовый файл,

вкотором построчно записаны параметры и их значения.

11.3. Компиляция и выполнение проекта

Впроцессе компиляции проекта создается готовый к использованию файл, которым может быть приложение (расширение ехе) или динамически загружаемая библиотека (расширение dll). Как говорилось выше, мы будем рассматривать только приложения. Имя приложения, получаемого в результате компиляции, совпадает с именем файла проекта, а само приложение является автономным

ине требует для своей работы дополнительных файлов С++ Builder.

Замечания.

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

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

Компиляция выполняется вызовом команды P r o j e c t \ C o m p i l e < P r o j e c t 1 >

( П р о е к т \ К о м п и л и р о в а т ь < П р о е к т 1 > ) или нажатием комбинации клавиш

<Ctrl>+<F9>.

Вкоманде содержится имя проекта, разработка которого осуществляется

внастоящий момент (первоначально Project 1). При сохранении проекта под другим именем соответственно должно быть изменено и имя проекта в команде меню.

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

Компилируются файлы всех модулей, содержимое которых изменилось со времени последней компиляции. Если исходный текст модуля по ка- ким-либо причинам недоступен компилятору, то он не перекомпилируется.

Если в модуль были внесены изменения, то перекомпилируется не только этот модуль, но и модули, использующие его с помощью директивы препроцессора #include.

Перекомпиляция модуля происходит также при изменениях объектного файла (расширение obj) или подключаемого файла, используемых данным модулем.

3 82

Часть 3. Современные СУБД и их применение

После компиляции всех модулей проекта компилируется файл проекта

исоздается исполняемый файч приложения с именем файла проекта.

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

команда P r o j e c t \ B u i l d < P r o j e c t 1 > ( П р о е к т \ С о б р а т ь < П р о е к т 1 > ) .

Запустить проект на выполнение можно как в среде С++ Builder, так и в среде Windows.

Выполнение проекта в среде С++ Builder осуществляется командой R u n \ R u n или нажатием клавиши <F9>. При этом созданное приложение начинает свою работу. Если в файлы проекта вносились изменения, то предварительно выполняется компиляция проекта.

С помощью команды R u n \ M a k e задается компиляция и сборка проекта без немедленного выполнения приложения (полученного файла с расширением .ехе). По существу именно последним (отсутствием запуска приложения) и отличается действие команды M a k e от команды R u n .

Запущенное приложение работает так же, как и запущенное вне среды С++ Builder, однако имеются некоторые особенности:

нельзя запустить вторую копию приложения;

продолжить разработку проекта можно только после завершения работы приложения;

при зацикливании (зависании) приложения его завершение необходи-

мо выполнять средствами С++ Builder с помощью команды

R u n \ P r o g r a m R e s e t ( В ы п о л н е н и е \ П е р е з а п у с к п р о г р а м м ы ) и л и к о м -

бинации клавиш <Ctrl>+<F2>.

Для отладки приложений в среде С++ Builder можно использовать средства отладчика. В среде Windows созданное приложение можно запустить, как любое другое приложение, например, с помощью Проводника.

11.4. Разработка приложения

С++ Builder относится к системам визуального программирования, называемым также системами RAD (Rapid Application Development, быстрая разработка приложений). Разработка приложения в С++ Builder включает два взаимосвязанных этапа:

создание пользовательского интерфейса приложения;

определение функциональности приложения.

Пользовательский интерфейс приложения определяет способ взаимодействия пользователя и приложения, т. е. внешний вид формы (форм) при выполнении приложения и то, каким образом пользователь управляет приложением. Интер-