Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (1084484), страница 78
Текст из файла (страница 78)
Этот проектимеет в своем составе одну форму F o r m l , название которой видно в окнеФ о р м ы . Разработчик может изменить предлагаемое по умолчанию имя п р о екта, а также установить параметры среды таким образом, что после загрузкиЧасть 3. Современные СУБД и их применение372Рис. 11.4. Связи между файлами проектаС + + Builder будет автоматически загружаться приложение, разработка которого выполнялась в последний раз.Обычно файлы проекта располагаются в одном каталоге. Поскольку дажеотносительно простой проект включает в себя достаточно много файлов, апри добавлении к проекту новых форм количество этих файлов увеличивается, для каждого нового проекта целесообразно создавать отдельный каталог, где и сохранять все ф а й л ы проекта.ГоловнойфайлпроектаГоловной файл проекта является центральным файлом проекта, имеет расширение .срр и представляет собой собственно программу.
Для приложения,имеющего в составе одну форму, головной файл проекта имеет следующийвид:////Директивы препроцессора#include <vcl.h>#pragma hdrstop/// / МакросыUSEFILE("readme.txt");USEFORMfmain.cpp", FormMain);USERES("scrollba.res");/// / Главная функция WinMainWINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try{Application->lnitialize();Application->CreateForm(Application->Run();}classid(TFormMain), &FormMain);11. Borland С++ Builder373catch (Exception &exception){Application->ShowException(&exception);}return 0;}//Имя проекта (программы) совпадает с именем головного файла проекта иуказывается при сохранении этого файла на диске, первоначально это имяP r o j e c t 1. То же имя имеют файлы ресурсов и параметров проекта, при переименовании файла проекта данные файлы переименовываются автоматически.Сборка всего проекта выполняется при компиляции файла проекта. Приэтом имя создаваемого приложения (ехе-файл) или динамически загружаемой библиотеки (dll-файл) совпадает с названием файла проекта.
В дальнейшем мы будем подразумевать, что создается приложение, а не динамическизагружаемая библиотека.В начале головного файла проекта содержатся различные директивы препроцессора. В частности с помощью директивы #include <vcl.h> выполняется подключение заголовочного файла с объявлениями, используемыми в библиотеке визуальных компонентов.Далее следуют макросы, с помощью которых выполняется подлючениеф а й л о в ресурсов и форм. В частности, макрос U S E F O R M ( " M a i n . c p p " ,F o r m M a i n ) выполняет подключение модуля формы, расположенной в файлес именем 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 " ) выполняет поключение файла ресурсов s c r o l l b a . r e s .Далее расположена главная функция приложения — 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 >CreateForm(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 ( ) ; ) .
Названные операторы размещены в блоке t r y ,за которым следует блок c a t c h . Сделано это с целью обработки исключений,возможных при выполнении приложения. При этом используется стандартный обработчик исключений с применением функции ShowException.При выполнении разработчиком каких-либо операций с проектом С++Builder формирует код файла проекта автоматически. Например, при добав-Часть 3. Современные СУБД и их применение374лени и повой формы в файл проекта добавляются две строки кода, относящиеся к этой форме, а при исключении формы из проекта эти строки автоматически исключаются.
При необходимости программист может вносить изменения в ф а й л проекта самостоятельно, однако подобные действия могутразрушить целостность проекта и поэтому обычно выполняются только опытными программистами. Отметим, что некоторые операции, например, создание обработчика события для объекта Application, системой С++ Builder автоматически не выполняются и требуют самостоятельного кодирования вфайле проекта.Отображение кода головного файла проекта в окне Редактора кода задается командой Project\View Source (Проект\Просмотристочника).В файле проекта для многих приложений имеется похожий код, поэтому вдальнейшем при рассмотрении большинства приложений содержимое этогофайла нами не приводится.ФайлыформыДля каждой формы в составе проекта автоматически создаются файл представления формы (расширение .dfm) и ф а й л ы модуля формы: заголовочныйфайл (расширение .h) и файл исходного кода формы (расширение .срр).Файл представления формы является ресурсом С++ Builder и содержитхарактеристики формы и ее компонентов.
Разработчик обычно управляет этимфайлом через окна Ф о р м ы и И н с п е к т о р а о б ъ е к т о в . При конструированииформы в файл описания автоматически вносятся соответствующие изменения. Содержимое файла представления формы определяет ее вид. При необходимости можно отобразить этот файл на экране в текстовом виде, что выполняется командой V i e w a s T e x t ( П р о с м о т р е т ь к а к т е к с т ) контекстного менюформы.
При этом окно Ф о р м ы пропадает с экрана, а содержимое файла представления формы открывается в окне Редактора кода и доступно для просмотра и редактирования. Например, файл представления формы, включающей кнопку ( 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: TFormlLeft = 192Top = 133Width = 544Height = 375Caption = 'Forml'Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'MS Sans Serif/ I. Borland С++ Builder375Font.Style = []OldCreateOrder = FalsePixelsPerlnch = 96TextHeight = 13object Button 1: TButtonLeft = 144Top = 40Width = 57Height = 49Caption = 'ButtonVTabOrder = 0endobject Editl: TEditLeft = 224Top=136Width = 57Height = 21TabOrder = 1Text = 'Editl'endendЧтобы вернуться обратно от просмотра текстового вида файла представления к просмотру внешнего вида формы, нужно выполнить команду V i e w a sF 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>, после чегооткрывается диалоговое окно V i e w F o r m ( П р о с м о т р ф о р м ) , в списке которого и выбирается нужная форма.Одновременно можно отобразить на экране несколько форм.
Д л я закрытия того или иного окна Ф о р м ы нужно выполнить команду F i l e \ C l o s e( Ф а й л \ 3 а к р ы т ь ) или щелкнуть мышью на кнопке закрытия соответствующего окна.Заголовочный файл модуля формы содержит описание класса формы. Например, для формы, на которой размещены кнопка (Button 1), надпись(Labell) и однострочный редактор (Editl), заголовочный файл модуля формы содержит следующий код:Часть 3.
Современные СУБД и их применение376И#ifndefUnit1H#define U n i t l H//#include#include#include#include//<Classes.hpp><Controls.hpp><StdCtrls.hpp><Forms.hpp>class TForml : public TForm{published:/ / IDE-managed ComponentsTButton * Button 1;TLabel* L a b e l l ;TEdit *Edit1;void _ f a s t c a l l Button 1Click(TObject *Sender);private:/ / User declarationspublic:/ / User declarations_ f a s t c a l l T F o r m l (TComponent* Owner);};//extern PACKAGE T F o r m l *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 С++ Builder377////Директивы препроцессора#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 1void 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 ( Ф а й л \ О т к р ы т ь ) ) или в диалоговом окнеЧасть 3.