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

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

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

Для задания отображаемых значений надо использовать ме­ тоды серий S e r i e s . Остановимся только на трех основных мето­ дах:

- Метод C l e a r очищает серию занесенных ранее данных.

- Метод Add позволяет добавить в диаграмму новую точку. Объявление этой функции имеет следующий вид:

long int A d d (const double AValue, const S t r i n g A L a b el, T C o lo r A C o l o r ) ;

Параметр A V alue соответствует добавляемому значению, параметр A L ab el - название, которое будет отображаться на диа­ грамме и в легенде, A C o lo r - цвет. Параметр A L ab el - не обяза­ тельный, его можно задать пустым:мм.

-М етод AddXY позволяет добавить новую точку в график функции. Объявление этой функции имеет следующий вид:

long int AddXY(const

d o u b l e AXValue,

const double

AYValue, const S t r i n g

A L a b e l, T C o lo r

A C o l o r ) ;

Параметр A X V alue

и A Y V alue соответствуют аргументу и

функции. Параметр A L ab e l и A C o lo r те же, что и в методе Add.

-Разместите на форме кнопку T B u tto n и создайте обработ­ чик события O n C lic k кнопки.

Таким образом, процедура, обеспечивающая загрузку данных в нашем примере, может иметь вид:

void __fastcall T F o r m l : : B u t t o n l C l i c k ( T O b j e c t ♦ S e n d e r )

{

int m2 = 3; int m3 = 8; int m4 = 9; int m5 = 5;

S e r i e s l - > C l e a r () ;

S e r i e s l - > A d d (m2, " н е у д о в л . ", c l G r a y ) ;

-Отмените вывод легенды для диаграммы.

-Попробуйте самостоятельно изменить вид диаграммы.

Если вы предусмотрели, например, для данных, отображае­ мых в первой диаграмме, две серии S e r i e s l и S e rie s 2 разных видов - P ie и Ваг, то можно изменять по требованию пользова­ теля тип диаграммы.

- Для компонента T C h art добавьте новую серию данных.

- Для того, чтобы загрузить данные B S e rie s 2 n сделать эту диаграмму в первый момент невидимой, можно вставить в конце приведенной ранее функции операторы:

S e r i e s 2 - > A s s i g n ( S e r i e s l ) ;

S e r i e s 2 - > A c t i v e = f a l s e ;

Первый из этих операторов переписывает данные, помещен­ ные в S e r i e s l , в серию S e rie s 2 .A второй оператор делает не­ видимой серию S e rie s 2 .

- Для смены типа диаграммы разместите на форме кнопку и создайте обработчик события O nC lick для кнопки:

v o id __f a s t c a l l T F o r m l : : B u t to n 2 C l i c k (TObject

♦Sender)

{

S e r i e s l - > A c t i v e S e r i e s 2 - >Act i v e

=!S e r i e s l - > A c t i v e ;

=! S e r i e s 2 - >Act i v e ;

}

7.3. Построение графиков

Ниже рассматривается пример построения графиков функций с использованием компонента T C hart.

-Разместите на форме компонент T C h art, сделайте двой­ ной щелчок на компоненте.

Задайте для компонента две серии (будем строить два графи­ ка) и выберите тип диаграммы L ine, сняв флажок 3D.

-Выберите S e r i e s l , щелкните на кнопке T i t l e и задайте заголовок первого графика s i n (х)

- Аналогично задайте заголовок для другого графика -

c o s ( х ) .

- Н а странице C h a r t выберите вкладку A x is , щелкните на кнопке C hange и введите значение 0 , 5 - задаем шаг сетки по оси

Y ( L e f t A x i s ) .

-Разместите на форме кнопку T B u tto n и создайте обработ­

чик события OnC l i c k кнопки.

v o i d __ f a s t c a l l T F o r m l : : B u t t o n l C l i c k ( T O b j e c t * S en d er)

{

d o u b l e

x,

dx;

 

 

i n t

i ,

n

= 100;

 

 

dx

= 2*M

_ PI/n;

 

 

S e r i e s l - > C l e a r ( ) ;

 

 

S e r i e s 2 - > C l e a r () ;

 

 

f o r

( i =0,

x = 0 ; i < = n ;

i ++, x+=dx)

 

{

 

 

 

 

 

S e r i e s l - > A d d X Y ( x , s i n ( x ) ,

c l R e d ) ;

S e rie s2 - > A d d X Y ( x ,

c o s ( x ) ,

c l B l u e ) ;

}

}

Эту функцию можно включить в обработку щелчка какойнибудь кнопки, в команду меню или просто в событие O n C reate формы. Операторы C le a r нужны, если в процессе работы прило­ жения вы собираетесь обновлять данные. Без этих операторов по­ вторное выполнение метода AddXY только добавит новые точки, не удалив прежние.

-Запустите приложение и проверьте его работу (рис. 7.6).

-Попробуйте самостоятельно изменить вид графика функций.

-Измените заголовок компонента T C h a rt на График функций s in ( x ) и c o s (х)

8. СОЗДАНИЕ АНИМАЦИИ

Для создания анимации обычно используется компонент T T im er, расположенный на странице S y stem палитры компонен­ тов. T T im er - невизуальный компонент. Он имеет два свойства, которые позволяют им управлять:

- I n t e r v a l - интервал времени в миллисекундах;

- E n a b le d - доступность компонента.

Свойство I n t e r v a l задает период срабатывания таймера. Через заданный интервал времени возникает событие OnTimer.

В обработчике этого события записываются необходимые опера­ ции. Если задать l n t e r v a l =0 или E n a b le d = f a ls e , то таймер перестает работать.

8.1. Моделирование движения шарика

Рассмотрим простой пример движения шарика. Вначале ша­ рик будет иметь возможность перемещаться в горизонтальном на­ правлении.

-Начните новый проект и сохраните его.

-Поместите компонент T T im er. Измените значение свойства

I n t e r v a l на 2 0.

- Объявите в файле реализации модуля глобальные перемен­

ные.

int х,

у ;

/ /

Координаты центра шарика

int

г ;

/ /

Радиус

шарика

int

dx,

dy;

/ /

Приращение координат шарика

T C o lo r

c o l o r ;

/ /

Цвет шарика

- Создайте обработчик события O n C re a te формы.

void __fastcall T F o r m l: : F o rm C reate (T O b jec t *Sender)

{

r a n d o m i z e ( ) ;

г

=

10;

dx

=

1 ;

х = г + r a n d o m ( C l i e n t W i d t h - 2 * r ) ;

у = г + r a n d o m ( C l i e n t H e i g h t - 2 * r ) /

c o l o r = c l B l u e ;

}

 

 

- Создайте обработчик события O n P a in t формы.

void __fastcall T F o r m l : : F o r m P a i n t ( T O b j e c t *S ender)

{

C a n v a s - > P e n - > C o l o r = c o l o r ;

C a n v a s - > B r u s h - > C o lo r = c o l o r ;

C a n v a s - >E11i p s e ( x - r , y - r , x + r , y + r ) ;

}

- Создайте обработчик события O nT im er

компонента

T T im er.

 

void __fastcall T F o r m l : : T i m e r l T i m e r ( T O b j e c t

*S ender)

{

 

X += d X ;

I n v a l i d a t e ( ) ;

}

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

за пределы формы.

- Для исправления этой ситуации измените обработчик собы­ тия O nT im er компонента T T im er.

void __fastcall T F o r m l : : T i m e r l T i m e r ( T O b j e c t * S ender)

{

x

+=

dx;

if

( x + r > C l i e n t W i d t h | | x<r)

 

dx

= - d x ;

I n v a l i d a t e ( ) ;

}