C++Builder. Учебный курс
.pdfВ нижней части окна Редактора кода вы можете видеть ти пичную для текстовых редакторов строку состояния. Начиная с версии 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 начинает собственно выполнение программы. В этом методе реализуется бесконечный цикл получения и обра