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

C++Builder. Учебный курс

.pdf
Скачиваний:
14
Добавлен:
15.11.2022
Размер:
9.54 Mб
Скачать

В нижней части окна Редактора кода вы можете видеть ти­ пичную для текстовых редакторов строку состояния. Начиная с версии C++Builder 2006, в самой левой ее панели расположены кнопки, используемые для разработки макросов. Далее находится индикатор строки и колонки. Имеется также индикатор модифи­ кации, который словом M o d ifie d показывает, что код, который

вы видите в окне, изменен и не совпадает с тем, который хранится на диске. Еще один элемент строки состояния - стандартный для большинства редакторов индикатор режима вставки ( I n s e r t

или O v e rw rite ) .

В C++Builder 2007 видно или окно формы, или окно кода про­ граммы, для переключения между ними можно использовать за­

кладки в нижней части окна, клавишу F12 или кнопку на па­

нели инструментов.

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

1.1.5. Инспектор объектов

Инспектор объектов (O b je c t I n s p e c to r ) обеспечивает простой и удобный интерфейс для изменения свойств объектов C++Builder и управления событиями, на которые реагирует объект. Инспектор объектов практически одинаков почти во всех версиях C++Builder.

Окно инспектора объектов (рис. 1.6) содержит список компо­ нентов текущей формы, а также две станицы:

- страницу свойств - P r o p e r t i e s ,

- страницу событий - E v e n ts .

,<3 Object Inspector

*

X

Л

Object Inspector______________ Щ

X

|Forml irormi

 

 

(Vj

Forml TForml

 

Ы

 

 

 

 

 

 

 

 

 

 

 

 

 

IProperties 1Events

 

 

 

Properties |Events |

 

 

 

Action

 

 

 

 

Action

 

 

*

ActiveControl

 

 

 

 

ActiveControl

 

 

^.j

» Align

lalNone

S

Г 1

 

Menu

 

 

AlignWithMargins

! false

 

1

 

ObjectMenuItem

 

 

 

AlphaBlend

false

 

 

 

OnActivate

 

 

 

AlphaBlendValue

1255

 

 

 

OnABgnlnsertBefore

 

 

 

i±J Anchors

[akLeft.akTop]

 

 

 

OnAlignPosition

 

 

!

AutoScroll

false

 

 

 

OnCanResize

 

 

 

AutoSize

false

 

 

 

OnCBck

 

 

 

BiDiMode

bdLeftToRight

 

 

 

Ondose

 

 

 

I+I Borderlcons

, [biSystemMenii/biMi im

 

OndoseQuery

 

 

 

BorderStyle

ibsSizeable

 

 

 

OnConstrainedResiz

 

 

 

BorderWidth

jo

 

 

 

OnContextPopup

 

 

 

Caption

IForml

 

 

»

OiCreate

FormCreate

0

_ i

 

 

 

 

 

 

 

1

 

a

 

 

 

 

6

 

 

 

 

 

 

 

 

 

Рис. 1.6. Инспектор объектов

 

 

 

Страница свойств (рис. 1.6, а) состоит из двух колонок: левая

содержит название свойств выбранного компонента, а правая -

их

значения.

Страница событий (рис. 1.6, б) также имеет две колонки, в ле­ вой колонке содержатся имена стандартных событий, на которые может откликаться выбранный компонент, в правой - имена мето­ дов-обработчиков событий, которые должны реализовать реакцию компонента.

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

В контекстном меню инспектора объектов можно выбрать раздел A rra n g e и в нем установить одну из двух возможностей:

- by Name - упорядочить свойства и события в алфавитном порядке;

- или by C a te g o ry - упорядочить их по категориям.

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

Указание. Рекомендуется при работе в C++Builder упорядо­ чить объекты в алфавитном порядке.

Очень полезная особенность инспектора объектов - отобра­ жение компонентов, на которые имеются ссылки в данном компо­ ненте. Дело в том, что одни компоненты часто ссылаются на дру­ гие, используемые для каких-то целей. Например, как вы увидите в дальнейшем, на форме обычно располагается компонент главного меню TM ainM enu, на который ссылается форма (свойство Menu

формы). А этот компонент, в свою очередь, ссылается на список изображений - компонент T Im a g e L ist. И подобных ссылок на присоединенные компоненты в приложениях может быть доволь­ но много, особенно в проектах, работающих с базами данных. В инспекторе объектов, во-первых, свойства, в которых могут со­ держаться ссылки на другие компоненты, выделяются красным цветом и около этого свойства появляется символ «+». Если щелк­ нуть на нем, то раскроется список свойств присоединенного ком­ понента. Эти свойства выделяются зеленым цветом, чтобы не пу­ тать их со свойствами самого компонента.

1.1.6.Окно дерева объектов

ВC++Builder 2007 имеется окно S tr u c tu r e , которое ото­ бражает дерево всех визуальных и невизуальных компонентов (рис. 1.7), имеющихся в вашем приложении. Окно показывает са­ мые различные связи между компонентами: соотношение роди­ тельских и дочерних компонентов, связь компонентов через их свойства, связи с наборами данных и т.п.

1.2. Структура приложения C++Builder

После запуска C++Builder автоматически создается новый проект. Вы можете использовать этот проект для создания нового приложения или открыть уже существующий проект.

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

- главный файл проекта (. срр). Основная задача проектного файла - создание и запуск основной формы приложения. Это ос­ новной для проекта модуль исходного текста C++. Для просмотра файла проекта необходимо выполнить команду P ro je c t- > V ie w

S o u rc e ;

айл опций проекта ( . c b p r o j , . c b p ro j . lo c a l) . Это текстовые файлы, содержащие установки опций проекта и указа­ ния на то, какие файлы должны компилироваться и компоноваться

впроект;

-файл ресурсов приложения ( . re s ) . Двоичный файл, содер­ жащий ресурсы проекта: пиктограммы, курсоры и т.п. По умолча­ нию содержит только пиктограмму проекта (значок приложения, который будет виден при его свертывании). Начиная с C++Builder

2009, может изменяться командой P ro j e c t- > R e s o u rc e ;

- файл реализации модуля (. срр). Каждая форма из состава проекта обязательно имеет свой модуль. Можно создавать также чисто программные модули, не связанные с модулями;

- заголовочный файл модуля (. h). Каждой форме соответст­ вует не только файл модуля, но и его заголовочный файл с описа­ нием класса формы. Можно создавать также самостоятельно необ­ ходимые заголовочные файлы;

айл формы (.dfm ). Это двоичный или текстовый файл, который C++Builder создает для хранения информации о формах. Каждому файлу формы соответствует файл модуля.

Файл формы - это список свойств всех компонентов, вклю­ ченных в форму, значения которых были изменены сравнительно со значениями, задаваемыми по умолчанию (в конструкторе соот­ ветствующего объекта). Щелкнув на форме правой кнопкой мыши и выбрав из контекстного меню V iew a s T e x t, можно увидеть в редакторе кода файл формы в текстовом виде.

Начиная с C++Builder 5, пользователю предоставляется воз­ можность выбрать, в каком виде он предпочитает сохранять файл формы: текстовом или двоичном. Если вы щелкнете на форме пра­ вой кнопкой мыши, то увидите в контекстном меню индикатор T e x t DFM. По умолчанию он включен, и файлы формы хранятся в текстовом виде. Если выключить этот индикатор, то файлы форм будут храниться в двоичном виде.

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

Кроме перечисленных выше файлов компилятор после ус­ пешной компиляции и сборки проекта создает следующие файлы:

-объектный файл модуля ( .o b j) . Это откомпилированный файл модуля (. срр), который компонуется в окончательный ис­ полняемый файл;

- исполняемый файл (. ехе). Это исполняемый файл вашего приложения. Он является автономным исполняемым файлом, для которого больше ничего не требуется, если только вы не исполь­ зуете библиотеки, содержащиеся в пакетах, DLL и т.д.;

-динамически присоединяемая библиотека ( . d l l ) . Этот файл создается в случае, если вы проектируете свою собственную

DLL;

-файл, содержащий отладочную информацию ( .td s ) . Это двоичный файл, используемый отладчиком в процессе отладки приложения.

Из всех перечисленных файлов (а могут использоваться и другие) важнейшими являются файлы . срр, . h, . dfm, . c b p r o j,

. c b p r o j . l o c a l , . r e s . Это те файлы, которые вы, например, должны перенести на другой компьютер, если захотите продол­ жить на нем работу над своим проектом. Все остальные файлы C++Builder создаст автоматически в процессе компиляции проекта и его отладки.

Ниже приведены расширения имен основных файлов в C++Builder

Расширение

Описание

* . c b p r o j

файл опций проекта

* . c p p

файлы с исходным текстом модулей

* .h

заголовочные файлы

*. dfm

файлы формы

*. r e s

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

Примечание. При внесении изменений в файлы проекта C++Builder создает скрытую папку__ h i s t o r y , в которой нахо­ дятся файлы резервных копий. Для возвращения к предыдущим версиям приложения используйте закладку H is to r y .

1.2.1. Файл проекта

Главный файл проекта автоматически создается C++Builder и содержит лишь несколько строк. Чтобы увидеть их, выполните следующую команду P r o je c t- > V ie w S o u rc e . C++Builder по­ кажет окно кода с закладкой P ro j e c t l . срр, содержащего такой текст:

/ / ------------------------------------------------------------------------------------------------------------

# i n c l u d e < v c l . h >

#pragm a h d r s t o p

/ / ------------------------------------------------------------------------------------------------------------

USEFORM( " U n i t l . c p p " , F o r m l) ;

/ / ------------------------------------------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, i n t )

{

t r y

{

A p p l i c a t i o n - i n i t i a l i z e ( ) ;

S e tA p p lic a tio n M a in F o r m O n T a s k B a r ( A p p lic a tio n , true) ;

A p p l i c a t i o n - > C r e a t e F o r m (__ classid(T F o rm l), &Form l) ;

A p p l i c a t i o n - > R u n ( ) ;

}

catch ( E x c e p tio n & e x c e p tio n )

{

A p p l i c a t i o n - > S h o w E x c e p t i o n ( ^ e x c e p t i o n ) ;

}

catch (. .)

{

try

{

throw E x c e p t i o n ( " " ) ;

}

catch ( E x c e p tio n ^ e x c e p tio n )

{

A p p l i c a t i o n - > S h o w E x c e p t i o n (^ e x c e p t i o n ) ;

}

}

return 0;

}

Головной файл проекта содержит функцию W inM ain (в при­ ложениях для Windows главной является именно эта функция, а не функция m ain). В прочие модули вы вводите свой код, создавая обработчики различных событий. В заголовочные файлы этих мо­ дулей вы вводите свои объявления. Но головной модуль, как пра­ вило, вы не трогаете и даже не видите его текст. Только в исклю­ чительных случаях вам надо что-то изменять в тексте головного модуля, сгенерированном C-H-Builder.

Начинается файл головного модуля с директивы # i n c l u d e < v c l . h>, которая подключает заголовочный файл v c l . h, содер­

жащий объявления, используемые в библиотеке визуальных ком­ понентов C++Builder.

Далее идет директива #pragm a с опцией h d rs to p . Дирек­ тива #pragm a вызывает действия, зависящие от указанной опции. Список возможных действий вы можете найти во встроенной справке C++Builder. Опция h d r s to p связана с особенностью ра­ боты препроцессора, производительность которого существенно повышается, если учитывается, что некоторые заголовочные фай­

лы общие для всех модулей. Директива #pragm a h d rs to p ука­ зывает компилятору конец списка таких общих файлов. Так что надо следить за тем, чтобы не добавлять перед этой директивой включение каких-то заголовочных файлов, не являющихся общи­ ми для других модулей.

После директив препроцессора в файле размещены предло­ жения USERES и USEFORM. Это макросы, используемые для под­ ключения к проекту файлов форм, ресурсов и др. Макрос USERES

используется для подключения к проекту файлов ресурсов. Мак­ рос USEFORM подключает формы. Препроцессор развернет эти макросы в соответствующий код. C++Builder автоматически фор­ мирует соответствующее предложение с макросом USEFORM для каждой формы, вносимой вами в проект. Первый параметр макро­ са содержит имя файла модуля, соответствующего форме (напри­ мер, U n i t l . срр), а второй параметр - имя формы.

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

командную строку. Последний параметр определяет окно прило­ жения.

В теле программы в блоке t r y - три исполняемых оператора:

A p p l i c a t i o n - i n i t i a l i z e () ;

S e tA p p lic a tio n M a in F o r m O n T a s k B a r ( A p p lic a tio n , true); A p p l i c a t i o n - > C r e a t e F o r m ( __ classid(T F orm l) , & F o rm l); A p p l i c a t i o n - > R u n ( ) ;

Каждый из них реализует обращение к одному из методов объекта A p p l i c a t i o n .

В объекте A p p l i c a t i o n собраны данные и подпрограммы, необходимые для нормального функционирования Windowsпрограммы в целом. C++Builder автоматически создает объектпрограмму A p p l i c a t i o n для каждого нового проекта.

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

Объекты играют важную роль в современных языках про­ граммирования. Использование объектов увеличивает производи­ тельность труда программиста и одновременно повышает качество разрабатываемых программ. Два главных свойства объекта - функциональность и неделимость - делают его самостоятельной частью программы и позволяют легко переносить объект из одной программы в другую. Такой принцип построения программ назы­ вается объектно-ориентированным программированием (ООП).

С помощью его метода I n i t i a l i z e программа осуществля­ ет ряд вспомогательных действий, необходимых для работы под управлением операционной системы Windows.

Метод C re a te F o rm объекта создает и показывает на экране окно главной формы.

Метод Run начинает собственно выполнение программы. В этом методе реализуется бесконечный цикл получения и обра­