1102
.pdfТехнология создания приложений в C++Builder вышла на но вый уровень развития этих идей. Она включает типовые шаблоны только как элемент визуального программирования. В C++Builder разработчик выбирает необходимый компонент, например кнопку, и буксирует его при помощи мыши в нужное место окна формы. При этом кнопке автоматически присваивается название, и она описывается в модуле формы. Если затем настроить параметры и свойства (к примеру, изменить размеры кнопки и задать ей тип кнопки ОК), то их значения запоминаются и будут такими же при запуске приложения и повторной загрузке проекта. Щелчок на кнопке - и в исходном тексте появляется базовый шаблон проце дуры нужного типа (соответствующей реакции на щелчок).
Когда компонент перемещен из палитры компонентов в окно разрабатываемой формы, его имя попадает в список инспектора объектов, который отображает всю информацию о свойствах вы бранного компонента из окна формы, а также связан с редактором кода. Каждый компонент, с точки зрения приложения, является объектом и имеет свои свойства, отображающие состояние компо нента, и свои методы, реализующие реакцию компонента на раз личные события. Все эти данные представлены на двух страницах инспектора объектов, причем отображается информация о том объекте, который выбран в окне активной формы.
Рассмотрим два примера создания программ в C++Builder. Пример 1.1. Упражнение с кнопкой Ниже рассматривается первый пример создания приложения
в C++Builder с использованием кнопки T B u tto n . - Создайте новый проект.
-Поместите кнопку T B u tto n (страница S ta n d a rd ) в ниж
нюю часть формы. |
|
|
Свойству Name кнопки по умолчанию |
присваивается имя |
|
B u t t o n l . После |
этого определение класса |
в модуле U n i t l . h |
примет следующий вид: |
|
|
class TForml |
public TForm |
|
{ |
|
|
__published: |
/ / IDE-managed Components |
T B u tto n * B u t t o n l ; |
|
||
private: |
/ / |
U s e r |
d e c l a r a t i o n s |
public: |
/ / |
U s e r |
d e c l a r a t i o n s |
__fastcall |
TForm l(TC om ponent* O w n e r); |
||
}; |
|
|
|
B u tt on 1 - это имя кнопки, a T B u tto n —это имя класса. Об ратите внимание, что компоненты объявляются в классе как указа тели.
Классами в C++Builder называются специальные типы, кото рые содержат поля, методы и свойства. Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпля ров реализации, которые называются объектами. Классы в C++ подобны структурам ( s t r u c t ) , но кроме полей могут включать
методы (функции) и свойства.
-Теперь измените имя кнопки (свойство Name) на T e rm i
n a te .
Заметьте, что заголовок (C a p tio n ) поменялся в тот же мо мент. Такое двойное изменение наблюдается только если ранее не
изменялось свойство C a p tio n .
Текст, который вы видите на поверхности кнопки - это со
держимое свойства C a p tio n . Свойство Name служит для внут ренних ссылок, Вы будете использовать его при написании кода программы. Объявление класса T F orm l в файле U n i t l . h изме нится и будет выглядеть следующим образом:
class TForm l public TForm
{
__published: |
/ / |
ID E -m anaged C om ponents |
|
T B u tto n |
^ T e r m in a te ; |
||
private: |
/ / |
U s e r |
d e c l a r a t i o n s |
public: |
/ / |
U s e r |
d e c l a r a t i o n s |
__fastcall TForm l(TC om ponent* O w n e r);
} ;
В этом фрагменте кнопка T B u tto n называется T e rm in a te ,
так как вы присвоили это название свойству Name.
- Измените свойство C a p tio n кнопки на C lo se .
-Сохраните проект. Файлу модуля и файлу проекта присвой те имена по умолчанию.
-Запустите приложение.
-Нажмите на кнопку C lo se .
Обратите внимание, что нажатие на кнопку не приводит к закрытию приложения.
- Закройте приложение.
-П ерейдите на форму и дважды щелкните |
левой кнопкой |
мыши по объекту T B u tto n . |
|
Вы сразу попадете в окно редактора (файл |
U n itl.c p p ) , в |
котором увидите фрагмент кода: |
|
void __fastcall T F o rm l: : T e r m in a te C lic k ( T O b je c t ♦ S e n d e r )
{
}
Данный код был создан автоматически и будет выполняться всякий раз, когда во время работы программы пользователь на жмет кнопку C lo s e . Кроме того, вы можете видеть, что определе ние класса T F orm l теперь включает объявление метода T e rm i
n a te C li c k :
class TForml public TForm
{
__published: / / |
IDE-managed Components |
|
T B u tto n |
* T e r m in a te ; |
|
void __fastcall T e r m in a te C lic k ( T O b je c t * S e n d e r ) ; |
||
private: / / |
U s e r |
d e c l a r a t i o n s |
public: / / |
U s e r |
d e c l a r a t i o n s |
__fastcall TForml(TComponent* O w ner);
} ;
-Теперь дополните метод T e rm in a te C lic k строчкой
C lo s e ()
void __fastcall T F o r m l: : T e r m i n a t e C l i c k ( T O b j e c t
♦ S e n d e r )
{
C l o s e ( ) ;
}
Когда этот код исполняется, то главная форма (значит, и все приложение) закрывается.
-Для проверки кода запустите программу и нажмите кнопку C lo se .
Если все сделано правильно, программа закроется, и вы вер нетесь в режим разработки приложения.
-Перейдите в инспектор объектов и измените значение свой ства Name для кнопки на любое другое, например ОК. Нажмите E n te r для внесения изменений.
Посмотрите в редактор, вы увидите, что код, написанный ва ми, изменился:
void __fastcall T F o rm l: : O k C lic k (T O b je c t * S en d er)
{
C l o s e ( ) ;
}
Заметьте, что аналогичные изменения произошли и в опреде лении класса TForm l:
class TForml public TForm
{
__published: |
/ / |
ID E -m anaged |
C om ponents |
||
T B u tto n |
*Ok; |
|
|
|
|
void __fastcall |
O k C lic k (T O b je c t * S e n d e r ) ; |
||||
private: |
/ / |
U s e r |
d e c l a r a t i o n s |
|
|
public: |
/ / |
U s e r |
d e c l a r a t i o n s |
|
|
__fastcall TForm l(TC om ponent* |
O w n e r); |
};
Пример 1.2. Изменение цвета формы в диалоговом режиме В этом примере создается приложение для изменения цвета
формы в диалоговом режиме.
-Создайте новый проект.
-Сохраните проект.
-Поместите на форму компонент TButton.
-Свойству Name кнопки присвойте значение b tn C o lo r, а
свойству C a p tio n - Цвет.
- Поместите на форму компонент T Shape (страница A ddi - t i o n a l ) .
- Для свойства S h ap e компонента выберите из списка s tE l - l i p s e .
-Поместите на форму компонент T C o lo rD ia lo g (страница
D ia lo g s ) .
-Дважды щелкнув по кнопке, создайте обработчик события
O n C lic k .
void __fastcall T F o rm l: :b t n C o l o r C l i c k ( T O b je c t ♦ S e n d e r )
{
if ( C o l o r D i a l o g l - > E x e c u t e () )
S h a p e l - > B r u s h - > C o lo r = C o lo r D ia lo g l - > C o lo r ;
}
Для вывода диалогового окна используется метод E x e c u te . Если пользователь в диалоговом окне выбора цвета нажимает кнопку ОК, метод возвращает значение t r u e , если кнопку Отме на, то - f a l s e . После выполнения диалога имя выбранного цвета сохраняется в свойстве C o lo r компонента C o lo r D ia lo g l.
У компонента T S hape есть свойства B ru sh и Реп, с помо щью которых можно соответственно изменить цвет заливки и ли нии контура.
-Запустите приложение и измените цвет формы.
-Поместите на форму еще одну кнопку, с помощью которой можно было бы изменить цвет линии контура.
Упражнения
Упражнение 1.1
1.Запустить C++Builder.
2.Сохранить проект под новым именем. Проекту присвоить
имя F i r s t , модулю - имя F i r s t U n i t .
3.Запустить приложение F i r s t .
4.Закрыть приложение.
5.Поместить в форму компонент T L a b e l.
6.Изменить имя компонента на L a b e l (свойство Name).
7.Изменить заголовок (свойство C a p tio n ) формы и компо нента L a b e l.
8.Изменить цвет фона формы и компонента L a b e l.
9.Изменить цвет фона формы или компонента L a b e l с по мощью редактора свойств C o lo r (редактор свойств запускается двойным щелчком мыши по полю значения свойства C o lo r).
10.Изменить шрифт компонента L a b e l .
11. Изменить шрифт компонента L a b e l |
с помощью редакто |
ра свойств F o n t. |
|
12. Изменить свойство V i s i b l e компонента L a b e l на |
|
f a l s e и запустите приложение. |
|
13. Разобраться с назначением свойства |
A u to S iz e компо |
нента L a b e l. |
|
Упражнение 1.2
1.Создать новый проект.
2.Поместить в форму компонент T B u tto n .
3.Изменить размер и положение кнопки с помощью мыши.
4.Изменить размер и положение кнопки с помощью клавиш
S h i f t и C t r l .
5. Изменить размер и положение кнопки с помощью свойств
L e f t , T op, H e ig h t и W id th .
6.Изменить размер формы.
7.Изменить заголовок кнопки на C lo s e .
8.Запустить приложение и проверить, будет ли оно закры ваться при нажатии на кнопку C lose. Закрыть приложение.
9.Написать обработчик события O nC lick. Для этого в ди
зайнере формы дважды щелкните мышкой по кнопке C lose.
В редакторе кода вызовите функцию C lose.
10. Запустить приложение и закрыть его нажатием на кнопку
C lo s e . |
|
11. Изменить свойство E n ab led кнопки C lose |
на f a ls e . |
Запустить приложение. |
|
12. Исследовать назначение свойства C u rso r |
компонента |
T B u tto n . |
|
13. Удалить компонент B u tto n l.
14. Поместить в форму компонент T B itB tn (страница Ad
d i t i o n a l ) . |
|
|
|
15. Изменить свойство K ind |
компонента |
B itB tn l |
на |
b k C lo se . Запустить приложение и |
закрыть его |
нажатием |
на |
кнопку C lo se .
Сформулируем основные положения, изложенные в данной главе.
1. Процесс создания С++Вш1с1ег-программы разбивается на
2этапа:
-этап конструирования формы
-этап написания кода программы.
2.Конструирование формы осуществляется с помощью вы бора компонентов из палитры и размещения их на форме. Поло жение и размеры компонента могут быть изменены с помощью мыши, клавиатуры или инспектора объектов.
3. Чтобы придать компоненту нужные свойства, используется
страница P r o p e r t i e s инспектора объектов.
4.Чтобы компонент мог откликаться на то или иное собы тие, необходимо создать обработчик события.
5.Обработчик события оформляется в виде функции, имею щей составное имя. Первая часть имени представляет собой имя
класса для формы, вторая часть отделяется от первой символами ": :" и может быть произвольной. Если C++Builder автоматически формирует заготовку для обработчика, то вторая часть имени представляет собой объединение имени компонента и имени со бытия без предлога On.
6. Свойства компонента могут изменяться на этапе выполн ния программы.
Вопросы для самоконтроля
1.Основные элементы интегрированной среды.
2.Как переключиться между редактором кода программы и формой?
3.Назначение инспектора объектов.
4.Как выбрать компонент в инспекторе объектов?
5.Что такое проект?
6.Состав проекта. Перечислите основные файлы проекта.
7.Как открыть в Редакторе кода проектный файл?
8.Как открыть в Редакторе кода заголовочный файл?
9.Как создать новый проект?
10.Как открыть существующий проект?
11. Чем |
отличаются |
команды меню F i l e - >Ореп |
и |
F ile - > O p e n |
P r o j e c t |
. . . ? |
|
12.Для чего используется команда F i l e - >R eopen?
13.Как сохранить проект? Перечислите файлы, которые соз даются при сохранении проекта?
14.Какие файлы появляются после запуска приложения?
15.Как сохранить файл модуля?
|
16. Чем отличаются команды меню F ile - > S a v e P r o j e c t |
As |
. ,F i l e - > S a v e A l l и F ile - > S a v e ? |
17.Открыть новый проект и сохранить проект. Проекту при своить имя C a lc , модулю - имя M ainForm .
18.Действия при зависании программы, запущенной на вы полнение из C++Builder.
19. Размещение компонентов на форме. Как разместить на форме несколько одинаковых компонентов?
20.Чем отличаются свойства Name и C a p tio n компонентов?
21.Какие свойства компонента можно изменить при помощи
мыши?
22.Как можно изменить размеры и положение компонента? Указать несколько способов.
23.Какие изменения происходят в коде программы при раз мещении нового компонента на форме?
24.Какие изменения происходят в коде программы при ука зании нового имени компонента (свойство Name)?
25.Какие изменения происходят в коде программы при изме нении свойства C a p tio n компонента T L ab el?
26.Какие изменения происходят в программе при создании обработчика какого-нибудь события?
27.Как формируется имя обработчика события?
28. Как создать обработчик события O n C lick компонента
T B u tto n ?
29.Как создать обработчик события O n C reate формы?
30.Назначение метода E x ec u te диалоговых компонентов.
31. Назначение свойства A u to S iz e компонента T L abel.
32.Основное отличие компонентов T B u tto n и T B itB tn .
33.Какие изменения произойдут в головном файле проекта при добавлении к проекту новой формы?
34.Что такое дескриптор? Для чего он нужен?
35.Что такое объект?
36.Назовите основные операторы функции WinMain. Каково их назначение?
37.Из каких файлов состоит модуль? Что содержится в каж дом из этих файлов?
38.Для чего нужен раздел ^ p u b lis h e d в определении класса?
39.Для чего нужны директивы условной компиляции?