C++Builder. Учебный курс
.pdfДля задания отображаемых значений надо использовать ме тоды серий 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 ( ) ;
}