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

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

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

Вопросы для самоконтроля

1.Назначение компонента T T im er.

2.Основные свойства компонента TTimer.

3.Основное событие компонента T T im er.

4.Как запретить работу таймера?

5.Какие действия необходимо выполнить для создания ани­

мации?

6.Назначение метода I n v a li d a te .

7.Как убрать мерцание при анимации?

8.Назначение функции T im e T o S tr.

9.Назначение функции Tim e.

10. Объяснить, как работает метод NewCoord в классе

TB a ll.

11.Объяснить, как работает метод C la sh в классе T B all.

12.Напишите дружественную функцию D is t для определе­ ния расстояния между шариками.

13.Как работает обработчик события O nC reate формы в программе моделирования броуновского движения?

14.Как работает обработчик события O nP aint формы в про­ грамме моделирования броуновского движения?

Упражнения

1.Написать программу для создания анимации графика функции, заданной параметрически.

2.Написать программу, моделирующую электронные часы.

3.Написать программу, моделирующую часы со стрелками.

4.Написать программу для моделирования падения шарика в соответствии с законами физики.

5.Написать программу для моделирования движения шарика, брошенного под углом к горизонту.

6.Написать программу вращения линии вокруг одной из сво­ их точек.

7.Написать программу вращения линии вокруг произвольной точки. Координаты точки задаются с помощью генератора случай­ ных чисел.

8.Написать программу вращения треугольника вокруг одной

из вершин.

9. Написать программу вращения треугольника вокруг своего центра тяжести.

10.Написать программу вращения треугольника вокруг точ­ ки, лежащей внутри треугольника. Координаты точки задаются с помощью генератора случайных чисел.

11.Написать программу вращения прямоугольника вокруг своего центра.

12.Написать программу вращения прямоугольника вокруг одной из вершин.

13.Написать программу вращения прямоугольника вокруг точки, лежащей внутри прямоугольника. Координаты точки зада­ ются с помощью генератора случайных чисел.

14.Написать программу вращения шестиугольника вокруг своего центра.

15.Написать программу вращения шестиугольника вокруг одной из вершин.

16.Написать программу вращения окружности вокруг оси х.

17.Написать программу колебания груза на пружине с рисо­ ванием графиков перемещений и скоростей.

18.Написать программу, моделирующую броуновское дви­ жение (все шарики имеют разный размер).

19.Написать программу, имитирующую работу светофора.

20.Написать программу для моделирования броска баскетбо­ листа по кольцу. Программа должна определить, попал мяч в кольцо или нет. Предусмотреть в программе, что кольцо имеет баскетбольный щит, и мяч может попасть в кольцо от щита.

модуля присвойте, например, имя M ain, а файлу проекта -

Gr a p h E d ito r .

-Измените свойства формы в соответствии с рис. 9.1.

-Создайте меню программы, которое включает пункты Файл

и С п р авка.

-Д л я пункта Файл создайте подпункты С о зд а т ь , О ткрыть

и Выход; для пункта С п р авк а - подпункт О п рограм м е.

- Расположите на форме необходимые компоненты (в данном

примере используются три компонента

T P ane 1, компонент

T C o lo rG rid , два компонента T S h ap e, восемь кнопок

T S p e e d B u tto n , компонент T S ta tu s B a r

и компонент TIm age).

Самостоятельно разберитесь с назначением каждого компонента.

Указания

1. В качестве изображений для кнопок можно использовать стандартные, расположенные в папке

C :\P ro g r a m F iles\C o m m o n F il e s \C o d e G e a r

S h a r e d \

B u tto n s

 

 

2. Создать свои изображения можно, например, с использо­

ванием редактора Im age

E d i t o r , который

запускается из

C++Builder 5 командой

 

 

T o o ls - > Im a g e E d i t o r

и ли н е п о с р е д с т в е н н о и з папки

С : \P ro g ra m F i l e s \ B o r l a n d \ C B u i l d e r 5 \ B i n \

запустить файл i m a g e d i t . е х е .

3. Для изменения внешнего вида компонента T P ane 1 можно

использовать свойства B e v e l I n n e r , B e v e l O ut ©г и B e v e lW id th .

4. Необходимо помнить о назначении свойства Align ком­ понентов.

9.2.Создание обработчиков пунктов меню

-Создайте обработчики для пунктов меню:

Фа й л -> С о з д а т ь ,

Фа й л -> О т к р ы т ь ,

Файл->В ы ход и

С п р а в к а ->0 п рограм м е.

Указания

1.Для реализации команды Ф айл->Открыть необходимо использовать компонент T O p e n P ic tu re D ia lo g .

2.Как создавать обработчик пункта меню Справка->0 програм м е рассматривается в примере создания текстового ре­ дактора (глава 3).

9.3.Создание нестандартных курсоров

Вданной программе будут использоваться нестандартные курсоры. Для использования своего курсора надо сначала создать его и включить в ресурс приложения. Ниже рассматривается соз­

дание нестандартных курсоров с помощью программы Image

E d i t o r (C++Builder 5.0, файл i m a g e d i t . exe).

- Запустите Im age E d ito r .

 

Работа с файлом ресурса приложения

в Im age E d ito r

обычно начинается командой F ile -> O p e n ,

открывающей файл

ресурсов приложения . r e s , в котором вы хотите что-то изменить. Перед вами открывается окно, содержащее структуру файла в виде дерева (рис. 9.2). Сначала в нем может бьггь только один узел - Ic o n , содержащий вершину MAINICON, соответствующую стан­ дартной пиктограмме приложения. Добавить новые узлы можно с помощью команды R e so u rce -> N ew с выбором одного из эле­ ментов: B itm a p , C u r s o r или Ic o n . После выполнения команды

R e s o u rc e - > N e w - > C u rs o r в дереве структуры файла ресурсов приложения должна появиться новая вершина. Вы должны задать

Свойство C u r s o r объекта S c r e e n определяет вид курсора. Если это свойство равно c r D e f a u l t , то вид курсора при переме­ щении над компонентами определяется установленными в них свойствами C u rs o r . Но если свойство C u r s o r объекта S c re e n

отлично от c rD e f a u l t , то соответствующие свойства компонен­ тов отменяются, и курсор имеет глобальный вид, заданный в S c re e n . Этим можно воспользоваться для такой частой задачи, как изменение курсора на форму «песочные часы» во время вы­ полнения каких-то длительных операций.

Объект S c r e e n имеет также свойство C u r s o r s [ I ] , которое представляет собой список доступных приложению курсоров. Можно создать и использовать также свой собственный курсор. Как его создать и включить в ресурс приложения, было описано выше. Регистрируется созданный курсор с помощью функции L o a d C u rs o r. Сделать это можно следующим образом.

Пусть, например, вы создали свой курсор и включили его в ресурс приложения под именем NEWCURSOR. Тогда в своем при­ ложении можно ввести глобальную константу, обозначающую ваш курсор. Например:

c o n st i n t crM y C u rso r = 1;

Значение этой константы может лежать в пределах от - 327б8 до 32767. Но важно, чтобы она не совпадала с предопределенными значениями стандартных курсоров, лежащими в диапазоне от 0 до

- 21.

В обработчике события O n C re a te формы можно ввести опе­ ратор, регистрирующий ваш курсор в свойстве C u r s o rs :

S c r e e n - > C u r s o r s [ c r M y C u r s o r ] = L o a d C u r s o r ( H I n s ta n c e , "NEWCURSOR") ;

Обратите внимание на то, что имя курсора пишется обяза­ тельно заглавными буквами, так как именно так хранятся имена курсоров в ресурсах приложения.

В нужный момент вы можете установить этот курсор в каче­ стве глобального оператором

S c r e e n - > C u r s o r = crM yC ursor;

Вы можете использовать ваш зарегистрированный курсор и как локальный, например, для компонента Im age 1 оператором

I m a g e l - > C u r s o r = T C u rso r (crM yCursor) ;

Таким образом, для подключения созданных курсоров (на­ пример, вы создали курсоры и включили их в ресурс приложения под именами FILL, PLUS, DRAW, ERASE) к приложению необхо­ димо выполнить следующие действия:

-объявить глобальные константы, обозначающие ваши кур­ соры, например:

const

int

c r F i l l

=

1;

const

int

c r P l u s

=

2;

const

int

crD raw

=

3;

const

int

c r E r a s e

=

4;

- В

обработчике события O n C re a te формы добавить опера­

торы, регистрирующие ваши курсоры в свойстве C u rs o rs объек­

та S c re e n :

/ / Р е ги стр ац и я

курсоров

 

S c r e e n - > C u r s o r s

[ c r F i l l ]

= L o a d C u rs o r(H In s ta n c e ,

" F I L L " ) ;

 

 

S c r e e n - > C u r s o r s

[ c r P lu s ]

= L oadC ursor (H In s ta n c e ,

"PLUS" ) ;

 

 

S c r e e n - > C u r s o r s

[crDraw]

= L o a d C u rs o r(H In s ta n c e ,

"DRAW");

 

 

S c r e e n - > C u r s o r s

[ c rE ra s e ]

= L o a d C u rs o r(H In s ta n c e ,

"ERASE") ;

 

 

Обратите внимание на то, что имя курсора пишется обяза­ тельно заглавными буквами, так как именно так хранятся имена курсоров в ресурсах приложения.

Создайте обработчики событий O n C lic k для компонентов T S p e e d B u tto n . В обработчиках этих событий необходимо обес­ печить изменение курсора мыши при выборе соответствующего инструмента рисования, например:

void __fastcall T F o rm l: : s b P e n c i l C l i c k ( S e n d e r : TOb- j e c t ) ;

{

I m a g e l - > C u r s o r = T C u r s o r ( c r D r a w ) ;

}

9.5. Программирование функций графического редактора

- Сделайте так, чтобы одна из кнопок на панели инструмен­ тов фиксировалась в нажатом положении.

- В

файле реализации модуля объявите переменную

D ra w in g

типа B o o le a n и переменные x l , y l , х2, у2 типа i n t .

Самостоятельно разберитесь с назначением этих переменных в программе.

-Создайте обработчик события O n C re a te формы. Этот об­ работчик может содержать, например, следующие операторы:

void __fastcall T F o rm l: : F o rm C r e a te (T O b je c t * S en d er)

{

D raw ing = false;

sb P e n c il-> D o w n = true;

C o l o r G r id l - > F o r e g r o u n d I n d e x = 0; C o lo r G r id l - > B a c k g r o u n d I n d e x = 15; Im a g e l - > C a n v a s - > P e n - > C o lo r =

C o l o r G r i d l - b F o r e g r o u n d C o lo r ; I m a g e l - > C a n v a s - > B r u s h - > C o lo r =

C o l o r G r i d l - b B a c k g r o u n d C o lo r;

}

-Самостоятельно разберитесь с назначением свойств F o re - g r o u n d ln d e x , B a c k g ro u n d ln d e x , F o r e g ro u n d C o lo r и B a c k g ro u n d C o lo r компонента T C o lo rG rid .