Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009
.pdf11. 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. 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]
/ 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 включает два взаимосвязанных этапа:
•создание пользовательского интерфейса приложения;
•определение функциональности приложения.
Пользовательский интерфейс приложения определяет способ взаимодействия пользователя и приложения, т. е. внешний вид формы (форм) при выполнении приложения и то, каким образом пользователь управляет приложением. Интер-
